diff --git a/src/code/amd64.c b/src/code/amd64.c index e86e8fe5975398cc7d91d1cee3807e6c06bdc491..104a7e7b44184429df0ddd33a88c346f5b714324 100644 --- a/src/code/amd64.c +++ b/src/code/amd64.c @@ -2364,10 +2364,9 @@ void ins_f_byte_with_arg(unsigned int a, INT32 b) mov_mem_reg( sp_reg, -1*sizeof(struct svalue)+8, REG_RDX ); /* u.array */ /* -> arr[sizeof(arr)-b] */ mov_mem32_reg( REG_RDX, OFFSETOF(array,size), REG_RCX ); - mov_imm_reg( b, REG_RBX); - cmp_reg_reg( REG_RCX, REG_RBX ); - jge( &label_A ); /* b >= RBX, index outside array */ - shl_reg_imm( REG_RBX, 4 ); + cmp_reg32_imm( REG_RCX, b ); + jle( &label_A ); /* RCX <= b, index outside array */ + mov_imm_reg( b * sizeof(struct svalue), REG_RBX); add_reg_mem( REG_RBX, REG_RDX, OFFSETOF(array,item) ); /* This overwrites the array. */