+2011-05-02 Jan Hubicka <jh@suse.cz>
+
+ * lto-section-in.c (lto_input_1_unsigned): Move to lto-streamer.h
+ (lto_section_overrun): New.
+ * lto-section-out.c (append_block): Rename to ...
+ (lto_append_block): ... this one; export.
+ (lto_output_1_stream): Move lto lto-streamer.h
+ (lto_output_data_stream): Update.
+ * lto-streamer.h (lto_section_overrun, lto_append_block): Declare.
+ (lto_output_1_stream, lto_input_1_unsigned): Turn into inline
+ functions.
+
2011-05-02 Richard Guenther <rguenther@suse.de>
* tree.c (tree_code_counts): New global array.
"inline"
};
-unsigned char
-lto_input_1_unsigned (struct lto_input_block *ib)
-{
- if (ib->p >= ib->len)
- internal_error ("bytecode stream: trying to read %d bytes "
- "after the end of the input buffer", ib->p - ib->len);
-
- return (ib->data[ib->p++]);
-}
-
/* Read an ULEB128 Number of IB. */
slot = htab_find_slot (file_data->function_decl_states, &temp, NO_INSERT);
return slot? ((struct lto_in_decl_state*) *slot) : NULL;
}
+
+
+/* Report read pass end of the section. */
+
+void
+lto_section_overrun (struct lto_input_block *ib)
+{
+ internal_error ("bytecode stream: trying to read %d bytes "
+ "after the end of the input buffer", ib->p - ib->len);
+}
/* Adds a new block to output stream OBS. */
-static void
-append_block (struct lto_output_stream *obs)
+void
+lto_append_block (struct lto_output_stream *obs)
{
struct lto_char_ptr_base *new_block;
}
-/* Write a character to the output block. */
-
-void
-lto_output_1_stream (struct lto_output_stream *obs, char c)
-{
- /* No space left. */
- if (obs->left_in_block == 0)
- append_block (obs);
-
- /* Write the actual character. */
- *obs->current_pointer = c;
- obs->current_pointer++;
- obs->total_size++;
- obs->left_in_block--;
-}
-
-
/* Write raw DATA of length LEN to the output block OB. */
void
/* No space left. */
if (obs->left_in_block == 0)
- append_block (obs);
+ lto_append_block (obs);
/* Determine how many bytes to copy in this loop. */
if (len <= obs->left_in_block)
extern void lto_free_section_data (struct lto_file_decl_data *,
enum lto_section_type,
const char *, const char *, size_t);
-extern unsigned char lto_input_1_unsigned (struct lto_input_block *);
extern unsigned HOST_WIDE_INT lto_input_uleb128 (struct lto_input_block *);
extern unsigned HOST_WIDEST_INT lto_input_widest_uint_uleb128 (
struct lto_input_block *);
extern int lto_eq_in_decl_state (const void *, const void *);
extern struct lto_in_decl_state *lto_get_function_in_decl_state (
struct lto_file_decl_data *, tree);
+extern void lto_section_overrun (struct lto_input_block *) ATTRIBUTE_NORETURN;
/* In lto-section-out.c */
extern hashval_t lto_hash_decl_slot_node (const void *);
extern void lto_begin_section (const char *, bool);
extern void lto_end_section (void);
extern void lto_write_stream (struct lto_output_stream *);
-extern void lto_output_1_stream (struct lto_output_stream *, char);
extern void lto_output_data_stream (struct lto_output_stream *, const void *,
size_t);
extern void lto_output_uleb128_stream (struct lto_output_stream *,
extern struct lto_out_decl_state *lto_pop_out_decl_state (void);
extern void lto_record_function_out_decl_state (tree,
struct lto_out_decl_state *);
+extern void lto_append_block (struct lto_output_stream *);
/* In lto-streamer.c. */
return val & mask;
}
+
+/* Write a character to the output block. */
+
+static inline void
+lto_output_1_stream (struct lto_output_stream *obs, char c)
+{
+ /* No space left. */
+ if (obs->left_in_block == 0)
+ lto_append_block (obs);
+
+ /* Write the actual character. */
+ *obs->current_pointer = c;
+ obs->current_pointer++;
+ obs->total_size++;
+ obs->left_in_block--;
+}
+
+
+/* Read byte from the input block. */
+
+static inline unsigned char
+lto_input_1_unsigned (struct lto_input_block *ib)
+{
+ if (ib->p >= ib->len)
+ lto_section_overrun (ib);
+ return (ib->data[ib->p++]);
+}
+
#endif /* GCC_LTO_STREAMER_H */