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 1150... Line 1150...
1150
            reg1 := GetAnyReg();
1150
            reg1 := GetAnyReg();
1151
            lea(reg1, param2, sIMP);
1151
            lea(reg1, param2, sIMP);
1152
            movrm(reg1, reg1, 0)
1152
            movrm(reg1, reg1, 0)
Line 1153... Line 1153...
1153
 
1153
 
1154
        |IL.opPARAM:
-
 
1155
            n := param2;
1154
        |IL.opPARAM:
1156
            IF n = 1 THEN
1155
            IF param2 = 1 THEN
1157
                UnOp(reg1);
1156
                UnOp(reg1);
1158
                push(reg1);
1157
                push(reg1);
1159
                drop
1158
                drop
1160
            ELSE
1159
            ELSE
1161
                ASSERT(R.top + 1 <= n);
1160
                ASSERT(R.top + 1 <= param2);
1162
                PushAll(n)
1161
                PushAll(param2)
Line 1163... Line 1162...
1163
            END
1162
            END
1164
 
1163
 
1165
        |IL.opJNZ1:
1164
        |IL.opJNZ1:
Line 1342... Line 1341...
1342
            pushc(param2);
1341
            pushc(param2);
1343
            CallRTL(IL._rot)
1342
            CallRTL(IL._rot)
Line 1344... Line 1343...
1344
 
1343
 
1345
        |IL.opNEW:
1344
        |IL.opNEW:
1346
            PushAll(1);
1345
            PushAll(1);
1347
            n := param2 + 8;
1346
            n := param2 + 16;
1348
            ASSERT(UTILS.Align(n, 8));
1347
            ASSERT(UTILS.Align(n, 16));
1349
            pushc(n);
1348
            pushc(n);
1350
            pushc(param1);
1349
            pushc(param1);
Line 1351... Line 1350...
1351
            CallRTL(IL._new)
1350
            CallRTL(IL._new)
Line 1785... Line 1784...
1785
            drop;
1784
            drop;
1786
            drop;
1785
            drop;
1787
            X86._movrm(reg1, reg1, 0, param2 * 8, FALSE);
1786
            X86._movrm(reg1, reg1, 0, param2 * 8, FALSE);
1788
            X86._movrm(reg1, reg2, 0, param2 * 8, TRUE)
1787
            X86._movrm(reg1, reg2, 0, param2 * 8, TRUE)
Line 1789... Line -...
1789
 
-
 
1790
        |IL.opCHKBYTE:
-
 
1791
            BinOp(reg1, reg2);
-
 
1792
            cmprc(reg1, 256);
-
 
1793
            jcc(jb, param1)
-
 
1794
 
1788
 
1795
        |IL.opCHKIDX:
1789
        |IL.opCHKIDX:
1796
            UnOp(reg1);
1790
            UnOp(reg1);
1797
            cmprc(reg1, param2);
1791
            cmprc(reg1, param2);
Line 1830... Line 1824...
1830
            END;
1824
            END;
Line 1831... Line 1825...
1831
 
1825
 
1832
            INCL(R.regs, reg1);
1826
            INCL(R.regs, reg1);
Line 1833... Line -...
1833
            ASSERT(REG.GetReg(R, reg1))
-
 
1834
 
-
 
1835
        |IL.opCHR:
-
 
1836
            UnOp(reg1);
-
 
1837
            andrc(reg1, 255)
-
 
1838
 
-
 
1839
        |IL.opWCHR:
-
 
1840
            UnOp(reg1);
-
 
1841
            andrc(reg1, 65535)
1827
            ASSERT(REG.GetReg(R, reg1))
1842
 
1828
 
1843
        |IL.opEQP, IL.opNEP, IL.opEQIP, IL.opNEIP:
1829
        |IL.opEQP, IL.opNEP, IL.opEQIP, IL.opNEIP:
Line 1844... Line 1830...
1844
            UnOp(reg1);
1830
            UnOp(reg1);
Line 2383... Line 2369...
2383
VAR
2369
VAR
2384
    path, modname, ext: PATHS.PATH;
2370
    path, modname, ext: PATHS.PATH;
Line 2385... Line 2371...
2385
 
2371
 
2386
BEGIN
2372
BEGIN
-
 
2373
    Xmm[0] := 0;
2387
    Xmm[0] := 0;
2374
    X86.align16(TRUE);
Line 2388... Line 2375...
2388
    tcount := CHL.Length(IL.codes.types);
2375
    tcount := CHL.Length(IL.codes.types);
2389
 
2376
 
2390
    Win64RegPar[0] := rcx;
2377
    Win64RegPar[0] := rcx;