case irms_reference:
/* addresses always wrap around */
temp = alloca(sc_get_buffer_length());
- memcpy(temp, sc_get_buffer(), sc_get_buffer_length());
+ memcpy(temp, value, sc_get_buffer_length());
sc_truncate(get_mode_size_bits(mode), temp);
/* the sc_ module expects that all bits are set ... */
sign_extend(temp, mode);
return get_mode_max(mode);
case TV_OVERFLOW_WRAP:
temp = alloca(sc_get_buffer_length());
- memcpy(temp, sc_get_buffer(), sc_get_buffer_length());
+ memcpy(temp, value, sc_get_buffer_length());
sc_truncate(get_mode_size_bits(mode), temp);
/* the sc_ module expects that all bits are set ... */
sign_extend(temp, mode);
return get_mode_min(mode);
case TV_OVERFLOW_WRAP: {
char *temp = alloca(sc_get_buffer_length());
- memcpy(temp, sc_get_buffer(), sc_get_buffer_length());
+ memcpy(temp, value, sc_get_buffer_length());
sc_truncate(get_mode_size_bits(mode), temp);
return get_tarval(temp, length, mode);
}
tv == get_mode_all_one(get_tarval_mode(tv));
}
+/*
+ * test if one, 1 means 'yes'
+ */
+int tarval_is_minus_one(tarval *a) {
+ return
+ a != tarval_bad &&
+ a == get_tarval_minus_one(get_tarval_mode(a));
+}
+
/*
* comparison
*/
assert(0);
break;
}
- if (! fc_flt2int(res, sc_get_buffer(), dst_mode))
+ buffer = alloca(sc_get_buffer_length());
+ if (! fc_flt2int(res, buffer, dst_mode))
return tarval_bad;
- return get_tarval(sc_get_buffer(), sc_get_buffer_length(), dst_mode);
+ return get_tarval(buffer, sc_get_buffer_length(), dst_mode);
default:
/* the rest can't be converted */
if (get_mode_sort(dst_mode) == irms_int_number) {
buffer = alloca(sc_get_buffer_length());
memcpy(buffer, src->value, sc_get_buffer_length());
- sign_extend(buffer, dst_mode);
+ sign_extend(buffer, src->mode);
return get_tarval_overflow(buffer, src->length, dst_mode);
}
break;