+/*
+ * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved.
+ *
+ * This file is part of libFirm.
+ *
+ * This file may be distributed and/or modified under the terms of the
+ * GNU General Public License version 2 as published by the Free Software
+ * Foundation and appearing in the file LICENSE.GPL included in the
+ * packaging of this file.
+ *
+ * Licensees holding valid libFirm Professional Edition licenses may use
+ * this file in accordance with the libFirm Commercial License.
+ * Agreement provided with the Software.
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE.
+ */
+
/**
* Dumps global variables and constants as mips assembler.
* @date 14.02.2006
* @version $Id$
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
obstack_printf(obst, "%s", get_entity_ld_name(get_SymConst_entity(init)));
break;
+ case symconst_ofs_ent:
+ obstack_printf(obst, "%d", get_entity_offset(get_SymConst_entity(init)));
+ break;
+
case symconst_type_size:
obstack_printf(obst, "%d", get_type_size_bytes(get_SymConst_type(init)));
break;
* @param ent The entity
* @return 1 if it is a string constant, 0 otherwise
*/
-static int ent_is_string_const(entity *ent)
+static int ent_is_string_const(ir_entity *ent)
{
int res = 0;
ir_type *ty;
* @param obst The obst to dump on.
* @param ent The entity to dump.
*/
-static void dump_string_cst(struct obstack *obst, entity *ent)
+static void dump_string_cst(struct obstack *obst, ir_entity *ent)
{
int i, n;
if (isprint(c))
obstack_printf(obst, "%c", c);
else
- obstack_printf(obst, "%O", c);
+ obstack_printf(obst, "\\%o", c);
break;
}
}
* Dumps the initialization of global variables that are not
* "uninitialized".
*/
-static void dump_global(struct obstack *rdata_obstack, struct obstack *data_obstack, struct obstack *comm_obstack, entity *ent)
+static void dump_global(struct obstack *rdata_obstack, struct obstack *data_obstack, struct obstack *comm_obstack, ir_entity *ent)
{
ir_type *ty = get_entity_type(ent);
const char *ld_name = get_entity_ld_name(ent);
/* potential spare values should be already included! */
for (i = 0; i < get_compound_ent_n_values(ent); ++i) {
- entity *step = get_compound_ent_value_member(ent, i);
+ ir_entity *step = get_compound_ent_value_member(ent, i);
ir_type *stype = get_entity_type(step);
if (get_type_mode(stype)) {
/* We wanna know how many arrays are on the path to the entity. We also have to know how
* many elements each array holds to calculate the offset for the entity. */
for (j = 0; j < graph_length; j++) {
- entity *step = get_compound_graph_path_node(path, j);
- ir_type *step_type = get_entity_type(step);
- int ty_size = (get_type_size_bits(step_type) + 7) >> 3;
- int k, n = 0;
+ ir_entity *step = get_compound_graph_path_node(path, j);
+ ir_type *step_type = get_entity_type(step);
+ int ty_size = (get_type_size_bits(step_type) + 7) >> 3;
+ int k, n = 0;
if (is_Array_type(step_type))
for (k = 0; k < get_array_n_dimensions(step_type); k++)
if (aipos) aipos--;
for (offset = j = 0; j < graph_length; j++) {
- entity *step = get_compound_graph_path_node(path, j);
+ ir_entity *step = get_compound_graph_path_node(path, j);
ir_type *step_type = get_entity_type(step);
- int ent_ofs = get_entity_offset_bytes(step);
+ int ent_ofs = get_entity_offset(step);
int stepsize = 0;
/* add all positive offsets (= offsets in structs) */
dump_global(rdata_obstack, data_obstack, comm_obstack, get_class_member(gt, i));
}
-
-static void mips_emit_stdlib_call(FILE *F, const char* name, int num) {
- fprintf(F, "%s:\n", name);
- fprintf(F, "\tori $v0, $zero, %d\n", num);
- fprintf(F, "\tsyscall\n");
- fprintf(F, "\tj $ra\n");
- fprintf(F, "\n");
-}
-
-/**
- * Emits a default library for spim... Hack for now...
- */
-static void mips_emit_standard_lib(FILE* F) {
- static int output = 0;
- if(output)
- return;
- output = 1;
-
- mips_emit_stdlib_call(F, "print_int", 1);
- mips_emit_stdlib_call(F, "print_string", 4);
- mips_emit_stdlib_call(F, "read_int", 5);
- mips_emit_stdlib_call(F, "read_string", 8);
- mips_emit_stdlib_call(F, "sbrk", 9);
- mips_emit_stdlib_call(F, "exit", 10);
-}
-
/************************************************************************/
void mips_gen_decls(FILE *out) {
obstack_free(&rodata, NULL);
obstack_free(&data, NULL);
obstack_free(&comm, NULL);
-
- fprintf(out, "\t.text\n");
-
- mips_emit_standard_lib(out);
}