Subversion Repositories Kolibri OS

Rev

Rev 8859 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 8859 Rev 9847
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-2021, Anton Krotov
4
    Copyright (c) 2018-2022, Anton Krotov
5
    All rights reserved.
5
    All rights reserved.
Line 6... Line 6...
6
*)
6
*)
Line 679... Line 679...
679
VAR
679
VAR
680
    cmd, next: COMMAND;
680
    cmd, next: COMMAND;
Line 681... Line 681...
681
 
681
 
Line 682... Line 682...
682
    opcode, param1, param2, param3, a, b, c, n, label, L, i, cc: INTEGER;
682
    opcode, param1, param2, param3, a, b, c, n, label, L, i, cc: INTEGER;
Line 683... Line 683...
683
 
683
 
Line 684... Line 684...
684
    reg1, reg2, xmm: INTEGER;
684
    reg1, reg2, reg3, xmm: INTEGER;
685
 
685
 
Line 1286... Line 1286...
1286
        |IL.opUMINS:
1286
        |IL.opUMINS:
1287
            UnOp(reg1);
1287
            UnOp(reg1);
1288
            not(reg1)
1288
            not(reg1)
Line 1289... Line 1289...
1289
 
1289
 
-
 
1290
        |IL.opCOPY:
-
 
1291
            IF (0 < param2) & (param2 <= 256) THEN
-
 
1292
                BinOp(reg1, reg2);
-
 
1293
                reg3 := GetAnyReg();
-
 
1294
                FOR n := 0 TO param2 - param2 MOD 8 - 1 BY 8 DO
-
 
1295
                    movrm(reg3, reg1, n);
-
 
1296
                    movmr(reg2, n, reg3)
-
 
1297
                END;
-
 
1298
                n := param2 - param2 MOD 8;
-
 
1299
                IF param2 MOD 8 >= 4 THEN
-
 
1300
                    movrm32(reg3, reg1, n);
-
 
1301
                    movmr32(reg2, n, reg3);
-
 
1302
                    INC(n, 4);
-
 
1303
                    DEC(param2, 4)
-
 
1304
                END;
-
 
1305
                IF param2 MOD 8 >= 2 THEN
-
 
1306
                    X86.movrm16(reg3, reg1, n);
-
 
1307
                    X86.movmr16(reg2, n, reg3);
-
 
1308
                    INC(n, 2);
-
 
1309
                    DEC(param2, 2)
-
 
1310
                END;
-
 
1311
                IF param2 MOD 8 = 1 THEN
-
 
1312
                    X86.movrm8(reg3, reg1, n);
-
 
1313
                    X86.movmr8(reg2, n, reg3);
-
 
1314
                END;
-
 
1315
                drop;
-
 
1316
                drop;
-
 
1317
                drop
1290
        |IL.opCOPY:
1318
            ELSE
1291
            PushAll(2);
1319
                PushAll(2);
1292
            pushc(param2);
1320
                pushc(param2);
-
 
1321
                CallRTL(IL._move)
Line 1293... Line 1322...
1293
            CallRTL(IL._move)
1322
            END
1294
 
1323
 
1295
        |IL.opMOVE:
1324
        |IL.opMOVE: