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 952... Line 952...
952
            END;
952
            END;
Line 953... Line 953...
953
 
953
 
954
            PExpression(parser, e);
954
            PExpression(parser, e);
955
            PARS.check(isInt(e), pos, 66);
955
            PARS.check(isInt(e), pos, 66);
956
            IF e.obj = eCONST THEN
956
            IF e.obj = eCONST THEN
957
                LoadConst(e)
957
                IL.AddCmd(IL.opCOPY, ARITH.Int(e.value))
958
            END;
958
            ELSE
-
 
959
                IL.AddCmd0(IL.opMOVE)
Line 959... Line 960...
959
            IL.AddCmd0(IL.opMOVE)
960
            END
960
 
961
 
961
        |PROG.sysCOPY:
962
        |PROG.sysCOPY:
962
            FOR i := 1 TO 2 DO
963
            FOR i := 1 TO 2 DO
Line 972... Line 973...
972
            END;
973
            END;
Line 973... Line 974...
973
 
974
 
974
            PExpression(parser, e);
975
            PExpression(parser, e);
975
            PARS.check(isInt(e), pos, 66);
976
            PARS.check(isInt(e), pos, 66);
976
            IF e.obj = eCONST THEN
977
            IF e.obj = eCONST THEN
977
                LoadConst(e)
978
                IL.AddCmd(IL.opCOPY, ARITH.Int(e.value))
978
            END;
979
            ELSE
-
 
980
                IL.AddCmd0(IL.opMOVE)
Line 979... Line 981...
979
            IL.AddCmd0(IL.opMOVE)
981
            END
980
 
982
 
981
        |PROG.sysCODE:
983
        |PROG.sysCODE:
982
            REPEAT
984
            REPEAT
Line 1617... Line 1619...
1617
        fparSize := LSL(ORD(PROG.getFloatParamsPos(procType, 3, int, flt)), 5) + MIN(parSize, 4)
1619
        fparSize := LSL(ORD(PROG.getFloatParamsPos(procType, 3, int, flt)), 5) + MIN(parSize, 4)
1618
    ELSIF cconv IN {PROG._systemv, PROG.systemv} THEN
1620
    ELSIF cconv IN {PROG._systemv, PROG.systemv} THEN
1619
        callconv := IL.call_sysv;
1621
        callconv := IL.call_sysv;
1620
        fparSize := LSL(ORD(PROG.getFloatParamsPos(procType, PROG.MAXSYSVPARAM - 1, int, flt)), 5) + parSize;
1622
        fparSize := LSL(ORD(PROG.getFloatParamsPos(procType, PROG.MAXSYSVPARAM - 1, int, flt)), 5) + parSize;
1621
        stk_par := MAX(0, int - 6) + MAX(0, flt - 8)
1623
        stk_par := MAX(0, int - 6) + MAX(0, flt - 8)
-
 
1624
    ELSIF cconv IN {PROG.fastcall, PROG._fastcall} THEN
-
 
1625
        IF parSize = 0 THEN
-
 
1626
            callconv := IL.call_stack
-
 
1627
        ELSIF parSize = 1 THEN
-
 
1628
            callconv := IL.call_fast1
-
 
1629
        ELSIF parSize >= 2 THEN
-
 
1630
            callconv := IL.call_fast2
-
 
1631
        END;
-
 
1632
        fparSize := 0
1622
    ELSE
1633
    ELSE
1623
        callconv := IL.call_stack;
1634
        callconv := IL.call_stack;
1624
        fparSize := 0
1635
        fparSize := 0
1625
    END;
1636
    END;
1626
    IL.setlast(begcall);
1637
    IL.setlast(begcall);