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 }