Subversion Repositories Kolibri OS

Rev

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

Rev 7983 Rev 8097
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-2019, Anton Krotov
4
    Copyright (c) 2018-2020, Anton Krotov
5
    All rights reserved.
5
    All rights reserved.
Line 6... Line 6...
6
*)
6
*)
Line 154... Line 154...
154
END GetAnyReg;
154
END GetAnyReg;
Line 155... Line 155...
155
 
155
 
156
 
156
 
157
PROCEDURE GetReg* (VAR R: REGS; reg: INTEGER): BOOLEAN;
157
PROCEDURE GetReg* (VAR R: REGS; reg: INTEGER): BOOLEAN;
158
VAR
158
VAR
Line 159... Line 159...
159
    free, n: INTEGER;
159
    free: INTEGER;
160
    res: BOOLEAN;
160
    res:  BOOLEAN;
Line 176... Line 176...
176
BEGIN
176
BEGIN
177
    IF reg IN R.regs THEN
177
    IF reg IN R.regs THEN
178
        Put(R, reg);
178
        Put(R, reg);
179
        res := TRUE
179
        res := TRUE
180
    ELSE
180
    ELSE
181
        n := InStk(R, reg);
181
        res := InStk(R, reg) # -1;
182
        IF n # -1 THEN
182
        IF res THEN
183
            free := GetFreeReg(R);
183
            free := GetFreeReg(R);
184
            IF free # -1 THEN
184
            IF free # -1 THEN
185
                Put(R, free);
185
                Put(R, free);
186
                exch(R, reg, free)
186
                exch(R, reg, free)
187
            ELSE
187
            ELSE
Line 190... Line 190...
190
                ASSERT(free # -1);
190
                ASSERT(free # -1);
191
                Put(R, free);
191
                Put(R, free);
192
                IF free # reg THEN
192
                IF free # reg THEN
193
                    exch(R, reg, free)
193
                    exch(R, reg, free)
194
                END
194
                END
195
            END;
195
            END
196
            res := TRUE
-
 
197
        ELSE
-
 
198
            res := FALSE
-
 
199
        END
196
        END
200
    END
197
    END
Line 201... Line 198...
201
 
198
 
202
    RETURN res
199
    RETURN res