Mercurial > repos > blastem
comparison gen_x86.c @ 1953:4af54c6ca3e6
Fix some questionable comparisons between 64-bit values and literals that fit in 32-bit integers
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 30 Apr 2020 23:33:55 -0700 |
parents | a79e92929044 |
children | e45a317802bd |
comparison
equal
deleted
inserted
replaced
1952:42c12d141f6e | 1953:4af54c6ca3e6 |
---|---|
169 char * x86_sizes[] = { | 169 char * x86_sizes[] = { |
170 "b", "w", "d", "q" | 170 "b", "w", "d", "q" |
171 }; | 171 }; |
172 | 172 |
173 #ifdef X86_64 | 173 #ifdef X86_64 |
174 #define CHECK_DISP(disp) (disp <= 0x7FFFFFFF && disp >= -2147483648) | 174 #define CHECK_DISP(disp) (disp <= ((ptrdiff_t)INT32_MAX) && disp >= ((ptrdiff_t)INT32_MIN)) |
175 #else | 175 #else |
176 #define CHECK_DISP(disp) 1 | 176 #define CHECK_DISP(disp) 1 |
177 #endif | 177 #endif |
178 | 178 |
179 void jmp_nocheck(code_info *code, code_ptr dest) | 179 void jmp_nocheck(code_info *code, code_ptr dest) |
1259 void mov_ir(code_info *code, int64_t val, uint8_t dst, uint8_t size) | 1259 void mov_ir(code_info *code, int64_t val, uint8_t dst, uint8_t size) |
1260 { | 1260 { |
1261 check_alloc_code(code, 14); | 1261 check_alloc_code(code, 14); |
1262 code_ptr out = code->cur; | 1262 code_ptr out = code->cur; |
1263 uint8_t sign_extend = 0; | 1263 uint8_t sign_extend = 0; |
1264 if (size == SZ_Q && val <= 0x7FFFFFFF && val >= -2147483648) { | 1264 if (size == SZ_Q && val <= ((int64_t)INT32_MAX) && val >= ((int64_t)INT32_MIN)) { |
1265 sign_extend = 1; | 1265 sign_extend = 1; |
1266 } | 1266 } |
1267 if (size == SZ_W) { | 1267 if (size == SZ_W) { |
1268 *(out++) = PRE_SIZE; | 1268 *(out++) = PRE_SIZE; |
1269 } | 1269 } |