- if (mode_is_reference(a->mode)) {
- dst_mode = a->mode;
- imm_mode = find_unsigned_mode(a->mode);
-
- if (imm_mode == NULL)
- return tarval_bad;
-
- a = tarval_convert_to(a, imm_mode);
- b = tarval_convert_to(b, imm_mode);
- }
- if (mode_is_reference(b->mode)) {
- dst_mode = b->mode;
- imm_mode = find_unsigned_mode(b->mode);
-
- if (imm_mode == 0)
- return tarval_bad;
-
- a = tarval_convert_to(a, imm_mode);
- b = tarval_convert_to(b, imm_mode);
+ if (mode_is_reference(a->mode) && a->mode != b->mode) {
+ b = tarval_convert_to(b, a->mode);
+ } else if (mode_is_reference(b->mode) && b->mode != a->mode) {
+ a = tarval_convert_to(a, b->mode);