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); |