Subversion Repositories Kolibri OS

Rev

Rev 8859 | Rev 9873 | 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 664... Line 664...
664
        OutIntByte(offs)
664
        OutIntByte(offs)
665
    END
665
    END
666
END _movrm;
666
END _movrm;
Line 667... Line 667...
667
 
667
 
668
 
668
 
669
PROCEDURE movmr (reg1, offs, reg2: INTEGER); (* mov dword[reg1+offs], reg2_8 *)
669
PROCEDURE movmr (reg1, offs, reg2: INTEGER); (* mov dword[reg1+offs], reg2 *)
670
BEGIN
670
BEGIN
Line 728... Line 728...
728
 
728
 
729
PROCEDURE translate (pic: BOOLEAN; stroffs: INTEGER);
729
PROCEDURE translate (pic: BOOLEAN; stroffs: INTEGER);
730
VAR
730
VAR
Line 731... Line 731...
731
    cmd, next: COMMAND;
731
    cmd, next: COMMAND;
Line 732... Line 732...
732
 
732
 
Line 733... Line 733...
733
    reg1, reg2, fr: INTEGER;
733
    reg1, reg2, reg3, fr: INTEGER;
Line 773... Line 773...
773
            UnOp(reg1);
773
            UnOp(reg1);
774
            OutByte2(0FFH, 0D0H + reg1);  (* call reg1 *)
774
            OutByte2(0FFH, 0D0H + reg1);  (* call reg1 *)
775
            drop;
775
            drop;
776
            ASSERT(R.top = -1)
776
            ASSERT(R.top = -1)
Line -... Line 777...
-
 
777
 
-
 
778
        |IL.opFASTCALL:
-
 
779
            IF param2 = 1 THEN
-
 
780
                pop(ecx)
-
 
781
            ELSIF param2 = 2 THEN
-
 
782
                pop(ecx);
-
 
783
                pop(edx)
-
 
784
            END
777
 
785
 
778
        |IL.opPRECALL:
786
        |IL.opPRECALL:
779
            PushAll(0);
787
            PushAll(0);
780
            IF (param2 # 0) & (fr >= 0) THEN
788
            IF (param2 # 0) & (fr >= 0) THEN
781
                subrc(esp, 8)
789
                subrc(esp, 8)
Line 830... Line 838...
830
        |IL.opENTER:
838
        |IL.opENTER:
831
            ASSERT(R.top = -1);
839
            ASSERT(R.top = -1);
Line 832... Line 840...
832
 
840
 
Line -... Line 841...
-
 
841
            SetLabel(param1);
-
 
842
 
-
 
843
            IF cmd.param3 > 0 THEN
-
 
844
                pop(eax);
-
 
845
                IF cmd.param3 >= 2 THEN
-
 
846
                    push(edx)
-
 
847
                END;
-
 
848
                push(ecx);
-
 
849
                push(eax)
833
            SetLabel(param1);
850
            END;
834
 
851
 
Line 835... Line 852...
835
            push(ebp);
852
            push(ebp);
836
            mov(ebp, esp);
853
            mov(ebp, esp);
Line 1706... Line 1723...
1706
            OutByte2(07DH, 002H); (* jge L *)
1723
            OutByte2(07DH, 002H); (* jge L *)
1707
            neg(reg1)             (* neg reg1
1724
            neg(reg1)             (* neg reg1
1708
                                     L: *)
1725
                                     L: *)
Line 1709... Line 1726...
1709
 
1726
 
-
 
1727
        |IL.opCOPY:
-
 
1728
            IF (0 < param2) & (param2 <= 64) THEN
-
 
1729
                BinOp(reg1, reg2);
-
 
1730
                reg3 := GetAnyReg();
-
 
1731
                FOR n := 0 TO param2 - param2 MOD 4 - 1 BY 4 DO
-
 
1732
                    movrm(reg3, reg1, n);
-
 
1733
                    movmr(reg2, n, reg3)
-
 
1734
                END;
-
 
1735
                n := param2 - param2 MOD 4;
-
 
1736
                IF param2 MOD 4 >= 2 THEN
-
 
1737
                    movrm16(reg3, reg1, n);
-
 
1738
                    movmr16(reg2, n, reg3);
-
 
1739
                    INC(n, 2);
-
 
1740
                    DEC(param2, 2)
-
 
1741
                END;
-
 
1742
                IF param2 MOD 4 = 1 THEN
-
 
1743
                    movrm8(reg3, reg1, n);
-
 
1744
                    movmr8(reg2, n, reg3);
-
 
1745
                END;
-
 
1746
                drop;
-
 
1747
                drop;
-
 
1748
                drop
1710
        |IL.opCOPY:
1749
            ELSE
1711
            PushAll(2);
1750
                PushAll(2);
1712
            pushc(param2);
1751
                pushc(param2);
-
 
1752
                CallRTL(pic, IL._move)
Line 1713... Line 1753...
1713
            CallRTL(pic, IL._move)
1753
            END
1714
 
1754
 
1715
        |IL.opMOVE:
1755
        |IL.opMOVE: