Mercurial > repos > blastem
comparison gen_x86.h @ 2268:5b308c7b098c
Avoid code mem allocation bomb when a div instruction gets rewritten
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 25 Dec 2022 18:16:44 -0800 |
parents | e45a317802bd |
children |
comparison
equal
deleted
inserted
replaced
2267:94cca8b8429e | 2268:5b308c7b098c |
---|---|
216 void btc_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t dst_disp, uint8_t size); | 216 void btc_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t dst_disp, uint8_t size); |
217 void btc_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size); | 217 void btc_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size); |
218 void btc_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t dst_disp, uint8_t size); | 218 void btc_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t dst_disp, uint8_t size); |
219 void jcc(code_info *code, uint8_t cc, code_ptr dest); | 219 void jcc(code_info *code, uint8_t cc, code_ptr dest); |
220 void jmp_rind(code_info *code, uint8_t dst); | 220 void jmp_rind(code_info *code, uint8_t dst); |
221 void jmp_nocheck(code_info *code, code_ptr dest); | |
221 void call_noalign(code_info *code, code_ptr fun); | 222 void call_noalign(code_info *code, code_ptr fun); |
222 void call_r(code_info *code, uint8_t dst); | 223 void call_r(code_info *code, uint8_t dst); |
223 void retn(code_info *code); | 224 void retn(code_info *code); |
224 void cdq(code_info *code); | 225 void cdq(code_info *code); |
225 void loop(code_info *code, code_ptr dst); | 226 void loop(code_info *code, code_ptr dst); |
226 uint8_t is_mov_ir(code_ptr inst); | 227 uint8_t is_mov_ir(code_ptr inst); |
227 | 228 |
229 #define ALLOC_CODE_RETRY_POINT code_info tmp_alloc_retry = *code; alloc_code_retry: | |
230 #define ALLOC_CODE_RETRY_VAR code_info tmp_alloc_retry | |
231 #define ALLOC_CODE_RETRY_POINT_NO_VAR tmp_alloc_retry = *code; alloc_code_retry: | |
232 #define CHECK_BRANCH_DEST(ptr) if (code->cur - ((ptr) + 1) > 127 || code->cur - ((ptr) + 1) < -128) {\ | |
233 code_info next_alloc_retry = *code;\ | |
234 *code = tmp_alloc_retry;\ | |
235 next_alloc_retry.cur = next_alloc_retry.last - (CODE_ALLOC_SIZE-RESERVE_WORDS);\ | |
236 jmp_nocheck(code, next_alloc_retry.cur);\ | |
237 *code = next_alloc_retry;\ | |
238 goto alloc_code_retry;\ | |
239 }\ | |
240 *(ptr) = code->cur - ((ptr) + 1); | |
241 | |
228 #endif //GEN_X86_H_ | 242 #endif //GEN_X86_H_ |
229 | 243 |