fehler137: tarval module does not model the explicit leading 1 for long double on...
[libfirm] / ir / be / mips / mips_transform.c
index c265761..ed9fb37 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1995-2007 University of Karlsruhe.  All right reserved.
+ * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
  *
  * This file is part of libFirm.
  *
@@ -124,8 +124,6 @@ static ir_node *try_create_Immediate(ir_node *node)
        tv = get_Const_tarval(node);
        if(tarval_is_long(tv)) {
                val = get_tarval_long(tv);
-       } else if(tarval_is_null(tv)) {
-               val = 0;
        } else {
                ir_fprintf(stderr, "Optimisation Warning: tarval %+F is not a long?\n",
                           node);
@@ -306,10 +304,8 @@ static ir_node* gen_Const(ir_node *node)
 
        if(tarval_is_long(tv)) {
                val = get_tarval_long(tv);
-       } else if(tarval_is_null(tv)) {
-               val = 0;
        } else {
-               panic("Can't get value of tarval %+F\n", node);
+               panic("Can't get value of tarval %+F", node);
        }
 
        val = get_tarval_long(tv);
@@ -503,7 +499,7 @@ static ir_node *gen_Proj_DivMod(ir_node *node)
                break;
        }
 
-       panic("invalid proj attached to %+F\n", divmod);
+       panic("invalid proj attached to %+F", divmod);
 }
 
 static ir_node *gen_Proj_Start(ir_node *node)
@@ -779,7 +775,7 @@ static ir_node *gen_Conv(ir_node *node)
                } else if(src_size == 16) {
                        res = new_rd_mips_seh(dbgi, irg, block, new_op);
                } else {
-                       panic("invalid conv %+F\n", node);
+                       panic("invalid conv %+F", node);
                }
        } else {
                ir_node *and_const;
@@ -789,7 +785,7 @@ static ir_node *gen_Conv(ir_node *node)
                } else if(src_size == 16) {
                        and_const = mips_create_Immediate(0xffff);
                } else {
-                       panic("invalid conv %+F\n", node);
+                       panic("invalid conv %+F", node);
                }
                res = new_rd_mips_and(dbgi, irg, block, new_op, and_const);
        }
@@ -1102,27 +1098,6 @@ static void mips_transform_Reload(mips_transform_env_t* env) {
        exchange(node, proj);
 }
 
-#if 0
-static ir_node *gen_node_for_StackParam(mips_transform_env_t *env)
-{
-       ir_node *node = env->irn;
-       ir_node *sp = get_irn_n(node, 0);
-       ir_node *load;
-       ir_node *nomem = new_rd_NoMem(env->irg);
-       ir_node *proj;
-       mips_attr_t *attr;
-
-       load = new_rd_mips_load_r(env->dbg, env->irg, env->block, nomem, sp, mode_T);
-       attr = get_mips_attr(load);
-       attr->stack_entity = be_get_frame_entity(node);
-       attr->modes.load_store_mode = env->mode;
-
-       proj = new_rd_Proj(env->dbg, env->irg, env->block, load, env->mode, pn_Load_res);
-
-       return proj;
-}
-#endif
-
 #if 0
 static ir_node *gen_AddSP(ir_node *node)
 {
@@ -1156,7 +1131,7 @@ static ir_node *gen_AddSP(ir_node *node)
 
 static ir_node *gen_Bad(ir_node *node)
 {
-       panic("Unexpected node %+F found in mips transform phase.\n", node);
+       panic("Unexpected node %+F found in mips transform phase.", node);
        return NULL;
 }
 
@@ -1202,160 +1177,6 @@ static void register_transformers(void)
        op_EndExcept->ops.generic = (op_func) gen_Bad;
 }
 
-#if 0
-/**
- * Transforms the given firm node (and maybe some other related nodes)
- * into one or more assembler nodes.
- *
- * @param node    the firm node
- * @param env     the debug module
- */
-void mips_transform_node(ir_node *node, void *env) {
-       mips_code_gen_t *cgenv = (mips_code_gen_t *)env;
-       ir_opcode code         = get_irn_opcode(node);
-       ir_node *asm_node      = node;
-       mips_transform_env_t tenv;
-
-       if (is_Block(node))
-               return;
-
-       tenv.block    = get_nodes_block(node);
-       tenv.dbg      = get_irn_dbg_info(node);
-       tenv.irg      = current_ir_graph;
-       tenv.irn      = node;
-       tenv.mode     = get_irn_mode(node);
-       tenv.cg           = cgenv;
-
-#define UNOP(firm_opcode, mips_nodetype)        case iro_##firm_opcode: asm_node = mips_gen_##mips_nodetype(&tenv, get_##firm_opcode##_op(node)); break
-#define BINOP(firm_opcode, mips_nodetype)       case iro_##firm_opcode: asm_node = mips_gen_##mips_nodetype(&tenv, get_##firm_opcode##_left(node), get_##firm_opcode##_right(node)); break
-#define IGN(a)         case iro_##a: break
-#define BAD(a)         case iro_##a: goto bad
-
-       switch (code) {
-               BINOP(Add, addu);
-               BINOP(Sub, sub);
-               BINOP(And, and);
-               BINOP(Or, or);
-               BINOP(Eor, xor);
-               UNOP(Not, not);
-               BINOP(Shl, sl);
-               BINOP(Shr, sr);
-               BINOP(Shrs, sra);
-
-       case iro_Abs:
-               asm_node = gen_node_for_Abs(&tenv);
-               break;
-
-       case iro_Rot:
-               asm_node = gen_node_for_Rot(&tenv);
-               break;
-
-       case iro_Div:
-               asm_node = gen_node_for_Div(&tenv);
-               break;
-
-       case iro_Mod:
-               asm_node = gen_node_for_Mod(&tenv);
-               break;
-
-       case iro_Load:
-               asm_node = gen_node_for_Load(&tenv);
-               break;
-
-       case iro_Store:
-               asm_node = gen_node_for_Store(&tenv);
-               break;
-
-       case iro_Proj:
-               asm_node = gen_node_for_Proj(&tenv);
-               break;
-
-       case iro_Conv:
-               asm_node = gen_node_for_Conv(&tenv);
-               break;
-
-       case iro_DivMod:
-               asm_node = gen_node_for_DivMod(&tenv);
-               break;
-
-       case iro_Mul:
-               asm_node = gen_node_for_Mul(&tenv);
-               break;
-
-       case iro_Jmp:
-               asm_node = gen_node_for_Jmp(&tenv);
-               break;
-
-       case iro_IJmp:
-               asm_node = gen_node_for_IJmp(&tenv);
-               break;
-
-       case iro_Unknown:
-               asm_node = gen_node_for_Unknown(&tenv);
-               break;
-
-       case iro_Cond:
-               asm_node = gen_node_for_Cond(&tenv);
-               break;
-
-       case iro_Phi:
-               asm_node = gen_node_for_Phi(&tenv);
-               break;
-
-               /* TODO: implement these nodes */
-               BAD(Mux);
-
-               /* You probably don't need to handle the following nodes */
-
-               // call is handled in the emit phase
-               IGN(Call);
-               // Cmp is handled together with Cond
-               IGN(Cmp);
-               IGN(Alloc);
-
-               IGN(Block);
-               IGN(Start);
-               IGN(End);
-               IGN(NoMem);
-               IGN(Break);
-               IGN(Sync);
-
-               IGN(Const);
-               IGN(SymConst);
-
-               BAD(Raise);
-               BAD(Sel);
-               BAD(InstOf);
-               BAD(Cast);
-               BAD(Free);
-               BAD(Tuple);
-               BAD(Id);
-               BAD(Bad);
-               BAD(Confirm);
-               BAD(Filter);
-               BAD(CallBegin);
-               BAD(EndReg);
-               BAD(EndExcept);
-
-               default:
-                       if(be_is_StackParam(node)) {
-                               //asm_node = gen_node_for_StackParam(&tenv);
-                       } else if(be_is_AddSP(node)) {
-                               asm_node = gen_node_for_AddSP(&tenv);
-                       }
-                       break;
-
-bad:
-               fprintf(stderr, "Not implemented: %s\n", get_irn_opname(node));
-               assert(0);
-       }
-
-       if (asm_node != node) {
-               exchange(node, asm_node);
-       }
-}
-#endif
-
 void mips_transform_graph(mips_code_gen_t *cg)
 {
        env_cg = cg;