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 |