+ return calc_buffer_size;
+}
+
+/**
+ * Do sign extension if the mode is signed, expects all upper bits
+ * cleared.
+ */
+static void sign_extend(char *calc_buffer, ir_mode *mode) {
+ if (mode_is_signed(mode)) {
+ int bits = get_mode_size_bits(mode) - 1;
+ int ofs = bits >> 2;
+ int max = max_digit[bits & 3];
+ int i;
+
+ if (calc_buffer[ofs] > max) {
+ /* sign bit is set, we need sign expansion */
+
+ for (i = ofs + 1; i < calc_buffer_size; ++i)
+ calc_buffer[i] = SC_F;
+ calc_buffer[ofs] = or_table[calc_buffer[ofs]][sex_digit[bits & 3]];
+ }
+ }