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 22... Line 22...
22
 
22
 
23
    opJMP* = 0; opLABEL* = 1; opCOPYS* = 2; opGADR* = 3; opCONST* = 4; opLLOAD32* = 5;
23
    opJMP* = 0; opLABEL* = 1; opCOPYS* = 2; opGADR* = 3; opCONST* = 4; opLLOAD32* = 5;
24
    opCOPYA* = 6; opCASET* = 7; opMULC* = 8; opMUL* = 9; opDIV* = 10; opMOD* = 11;
24
    opCOPYA* = 6; opCASET* = 7; opMULC* = 8; opMUL* = 9; opDIV* = 10; opMOD* = 11;
25
    opDIVL* = 12; opMODL* = 13; opDIVR* = 14; opMODR* = 15; opUMINUS* = 16;
25
    opDIVL* = 12; opMODL* = 13; opDIVR* = 14; opMODR* = 15; opUMINUS* = 16;
26
    opADD* = 17; opSUB* = 18; opONERR* = 19; opSUBL* = 20; opADDC* = 21; opSUBR* = 22;
26
    opADD* = 17; opSUB* = 18; opONERR* = 19; opSUBL* = 20; opADDC* = 21; opSUBR* = 22;
27
    opSAVE* = 23; opSAVEC* = 24; opSAVE8* = 25; opSAVE8C* = 26; opCHKBYTE* = 27; opDROP* = 28;
27
    opSAVE* = 23; opSAVEC* = 24; opSAVE8* = 25; opSAVE8C* = 26; (*opCHKBYTE* = 27;*) opDROP* = 28;
Line 28... Line 28...
28
    opNOT* = 29;
28
    opNOT* = 29;
29
 
29
 
30
    opEQ*  = 30; opNE* = opEQ + 1; opLT* = opEQ + 2; opLE* = opEQ + 3; opGT* = opEQ + 4; opGE* = opEQ + 5 (* 35 *);
30
    opEQ*  = 30; opNE* = opEQ + 1; opLT* = opEQ + 2; opLE* = opEQ + 3; opGT* = opEQ + 4; opGE* = opEQ + 5 (* 35 *);
Line 70... Line 70...
70
    opASR1* = 157; opLSL1* = 158; opROR1* = 159; opASR2* = 160; opLSL2* = 161; opROR2* = 162;
70
    opASR1* = 157; opLSL1* = 158; opROR1* = 159; opASR2* = 160; opLSL2* = 161; opROR2* = 162;
71
    opPUSHP* = 163; opLADR* = 164; opTYPEGP* = 165; opIS* = 166; opPUSHF* = 167; opVADR* = 168;
71
    opPUSHP* = 163; opLADR* = 164; opTYPEGP* = 165; opIS* = 166; opPUSHF* = 167; opVADR* = 168;
72
    opPUSHT* = 169; opTYPEGR* = 170; opISREC* = 171; opCHKIDX* = 172; opPARAM* = 173;
72
    opPUSHT* = 169; opTYPEGR* = 170; opISREC* = 171; opCHKIDX* = 172; opPARAM* = 173;
73
    opCHKIDX2* = 174; opLEN* = 175; opROT* = 176; opSAVES* = 177; opSADR* = 178; opLENGTHW* = 179;
73
    opCHKIDX2* = 174; opLEN* = 175; opROT* = 176; opSAVES* = 177; opSADR* = 178; opLENGTHW* = 179;
Line 74... Line 74...
74
 
74
 
75
    opCHR* = 180; opENDSW* = 181; opLEAVEF* = 182; opCLEANUP* = 183; opMOVE* = 184;
75
    (*opCHR* = 180;*) opENDSW* = 181; opLEAVEF* = 182; opCLEANUP* = 183; opMOVE* = 184;
76
    opLSR* = 185; opLSR1* = 186; opLSR2* = 187;
76
    opLSR* = 185; opLSR1* = 186; opLSR2* = 187;
77
    opMIN* = 188; opMINC* = 189; opMAX* = 190; opMAXC* = 191; opSYSVALIGN16* = 192;
77
    opMIN* = 188; opMINC* = 189; opMAX* = 190; opMAXC* = 191; opSYSVALIGN16* = 192;
78
    opEQB* = 193; opNEB* = 194; opINF* = 195; opWIN64ALIGN16* = 196; opVLOAD8* = 197; opGLOAD8* = 198;
78
    opEQB* = 193; opNEB* = 194; opINF* = 195; opWIN64ALIGN16* = 196; opVLOAD8* = 197; opGLOAD8* = 198;
79
    opLLOAD16* = 199; opVLOAD16* = 200; opGLOAD16* = 201;
79
    opLLOAD16* = 199; opVLOAD16* = 200; opGLOAD16* = 201;
Line 80... Line 80...
80
    opLOAD64* = 202; opLLOAD64* = 203; opVLOAD64* = 204; opGLOAD64* = 205; opSAVE64* = 206;
80
    opLOAD64* = 202; opLLOAD64* = 203; opVLOAD64* = 204; opGLOAD64* = 205; opSAVE64* = 206;
81
 
81
 
Line 82... Line 82...
82
    opTYPEGD* = 207; opCALLI* = 208; opPUSHIP* = 209; opSAVEIP* = 210; opEQIP* = 211; opNEIP* = 212;
82
    opTYPEGD* = 207; opCALLI* = 208; opPUSHIP* = 209; opSAVEIP* = 210; opEQIP* = 211; opNEIP* = 212;
Line 83... Line 83...
83
    opSAVE16C* = 213; opWCHR* = 214; opHANDLER* = 215;
83
    opSAVE16C* = 213; (*opWCHR* = 214;*) opHANDLER* = 215;
Line 263... Line 263...
263
BEGIN
263
BEGIN
264
    CHL.PushByte(codes.data, b)
264
    CHL.PushByte(codes.data, b)
265
END PutByte;
265
END PutByte;
Line -... Line 266...
-
 
266
 
-
 
267
 
-
 
268
PROCEDURE AlignData (n: INTEGER);
-
 
269
BEGIN
-
 
270
    WHILE CHL.Length(codes.data) MOD n # 0 DO
-
 
271
        PutByte(0)
-
 
272
    END
-
 
273
END AlignData;
266
 
274
 
267
 
275
 
268
PROCEDURE putstr* (s: ARRAY OF CHAR): INTEGER;
276
PROCEDURE putstr* (s: ARRAY OF CHAR): INTEGER;
269
VAR
277
VAR
-
 
278
    i, n, res: INTEGER;
-
 
279
BEGIN
-
 
280
    IF TARGETS.WinLin THEN
270
    i, n, res: INTEGER;
281
        AlignData(16)
271
BEGIN
-
 
272
    res := CHL.Length(codes.data);
282
    END;
273
 
283
    res := CHL.Length(codes.data);
274
    i := 0;
284
    i := 0;
275
    n := LENGTH(s);
285
    n := LENGTH(s);
276
    WHILE i < n DO
286
    WHILE i < n DO
Line 288... Line 298...
288
VAR
298
VAR
289
    res: INTEGER;
299
    res: INTEGER;
Line 290... Line 300...
290
 
300
 
291
BEGIN
301
BEGIN
-
 
302
    IF codes.charoffs[c] = -1 THEN
-
 
303
        IF TARGETS.WinLin THEN
-
 
304
            AlignData(16)
292
    IF codes.charoffs[c] = -1 THEN
305
        END;
293
        res := CHL.Length(codes.data);
306
        res := CHL.Length(codes.data);
294
        PutByte(c);
307
        PutByte(c);
295
        PutByte(0);
308
        PutByte(0);
296
        codes.charoffs[c] := res
309
        codes.charoffs[c] := res
Line 305... Line 318...
305
PROCEDURE putstrW* (s: ARRAY OF CHAR): INTEGER;
318
PROCEDURE putstrW* (s: ARRAY OF CHAR): INTEGER;
306
VAR
319
VAR
307
    i, n, res: INTEGER;
320
    i, n, res: INTEGER;
Line 308... Line 321...
308
 
321
 
309
BEGIN
322
BEGIN
310
    res := CHL.Length(codes.data);
-
 
311
 
323
    IF TARGETS.WinLin THEN
312
    IF ODD(res) THEN
324
        AlignData(16)
313
        PutByte(0);
325
    ELSE
314
        INC(res)
326
        AlignData(2)
-
 
327
    END;
Line 315... Line 328...
315
    END;
328
    res := CHL.Length(codes.data);
Line 316... Line 329...
316
 
329
 
317
    n := STRINGS.Utf8To16(s, codes.wstr);
330
    n := STRINGS.Utf8To16(s, codes.wstr);
Line 339... Line 352...
339
VAR
352
VAR
340
    res: INTEGER;
353
    res: INTEGER;
Line 341... Line 354...
341
 
354
 
342
BEGIN
355
BEGIN
343
    IF codes.wcharoffs[c] = -1 THEN
356
    IF codes.wcharoffs[c] = -1 THEN
344
        res := CHL.Length(codes.data);
-
 
345
 
357
        IF TARGETS.WinLin THEN
346
        IF ODD(res) THEN
358
            AlignData(16)
347
            PutByte(0);
359
        ELSE
348
            INC(res)
360
            AlignData(2)
-
 
361
        END;
Line 349... Line 362...
349
        END;
362
        res := CHL.Length(codes.data);
350
 
363
 
351
        IF TARGETS.LittleEndian THEN
364
        IF TARGETS.LittleEndian THEN
352
            PutByte(c MOD 256);
365
            PutByte(c MOD 256);