<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
Why all these extra temporaries?<div><br></div><div><br></div><div><div>static void</div><div>m3cg_max (void)</div><div>{</div><div> MTYPE (t);</div><div><br></div><div> tree t1 = declare_temp (t);</div><div> tree t2 = declare_temp (t);</div><div><br></div><div> add_stmt (m3_build2 (MODIFY_EXPR, t, t1, EXPR_REF (-1)));</div><div> add_stmt (m3_build2 (MODIFY_EXPR, t, t2, EXPR_REF (-2)));</div><div><br></div><div> EXPR_REF (-2) = m3_build3 (COND_EXPR, t,</div><div> m3_build2 (LE_EXPR, boolean_type_node, t2, t1),</div><div> t1, t2);</div><div> EXPR_POP ();</div><div>}</div><div><br></div><div><br></div><div>static void</div><div>m3cg_min (void)</div><div>{</div><div> MTYPE (t);</div><div><br></div><div> tree t1 = declare_temp (t);</div><div> tree t2 = declare_temp (t);</div><div><br></div><div> add_stmt (m3_build2 (MODIFY_EXPR, t, t1, EXPR_REF (-1)));</div><div> add_stmt (m3_build2 (MODIFY_EXPR, t, t2, EXPR_REF (-2)));</div><div><br></div><div> EXPR_REF (-2) = m3_build3 (COND_EXPR, t,</div><div> m3_build2 (LE_EXPR, boolean_type_node, t1, t2),</div><div> t1, t2);</div><div> EXPR_POP ();</div><div>}</div><div><br></div><div><br></div><div><br></div><div><div>static void</div><div>m3cg_check_nil (void)</div><div>{</div><div> INTEGER (code);</div><div><br></div><div> tree temp1 = declare_temp (t_addr);</div><div><br></div><div> m3_store (temp1, 0, t_addr, T_addr, t_addr, T_addr);</div><div> EXPR_PUSH (temp1);</div><div> add_stmt (build3 (COND_EXPR, t_void,</div><div> m3_build2 (EQ_EXPR, boolean_type_node, temp1, v_null),</div><div> generate_fault (code),</div><div> NULL_TREE));</div><div>}</div><div><br></div><div><br></div><div><br></div><div><div>static void</div><div>m3cg_check_lo (void)</div><div>{</div><div> MTYPE2 (t, T);</div><div> TARGET_INTEGER (a);</div><div> INTEGER (code);</div><div><br></div><div> tree temp1 = declare_temp (t);</div><div><br></div><div> a = convert (t, a);</div><div><br></div><div> if (option_exprs_trace)</div><div> fprintf (stderr, " check low type:%s code:0x%lx\n", m3cg_typename(T), code);</div><div><br></div><div> if (TREE_TYPE (EXPR_REF (-1)) != t)</div><div> EXPR_REF (-1) = m3_build1 (CONVERT_EXPR, t, EXPR_REF (-1));</div><div><br></div><div> m3_store (temp1, 0, t, T, t, T);</div><div> EXPR_PUSH (temp1);</div><div> add_stmt (build3 (COND_EXPR, t_void,</div><div> m3_build2 (LT_EXPR, boolean_type_node, temp1, a),</div><div> generate_fault (code),</div><div> NULL_TREE));</div><div>}</div><div><br></div><div><br></div><div><div>static void</div><div>m3cg_check_hi (void)</div><div>{</div><div> MTYPE2 (t, T);</div><div> TARGET_INTEGER (a);</div><div> INTEGER (code);</div><div><br></div><div> tree temp1 = declare_temp (t);</div><div><br></div><div> a = convert (t, a);</div><div><br></div><div> if (option_exprs_trace)</div><div> fprintf (stderr, " check high type:%s code:0x%lx\n", m3cg_typename(T), code);</div><div><br></div><div> if (TREE_TYPE (EXPR_REF (-1)) != t)</div><div> EXPR_REF (-1) = m3_build1 (CONVERT_EXPR, t, EXPR_REF (-1));</div><div><br></div><div> m3_store (temp1, 0, t, T, t, T);</div><div> EXPR_PUSH (temp1);</div><div> add_stmt (build3 (COND_EXPR, t_void,</div><div> m3_build2 (GT_EXPR, boolean_type_node, temp1, a),</div><div> generate_fault (code),</div><div> NULL_TREE));</div><div>}</div><div><br></div><div><br></div><div><div>static void</div><div>m3cg_check_range (void)</div><div>{</div><div> MTYPE2 (t, T);</div><div> TARGET_INTEGER (a);</div><div> TARGET_INTEGER (b);</div><div> INTEGER (code);</div><div><br></div><div> tree temp1 = declare_temp (t);</div><div><br></div><div> a = convert (t, a);</div><div> b = convert (t, b);</div><div><br></div><div> if (option_exprs_trace)</div><div> fprintf (stderr, " check range type:%s code:0x%lx\n", m3cg_typename(T), code);</div><div><br></div><div> if (TREE_TYPE (EXPR_REF (-1)) != t)</div><div> EXPR_REF (-1) = m3_build1 (CONVERT_EXPR, t, EXPR_REF (-1));</div><div><br></div><div> m3_store (temp1, 0, t, T, t, T);</div><div> EXPR_PUSH (temp1);</div><div> add_stmt (build3 (COND_EXPR, t_void,</div><div> m3_build2 (TRUTH_ORIF_EXPR, boolean_type_node,</div><div> m3_build2 (LT_EXPR,</div><div> boolean_type_node, temp1, a),</div><div> m3_build2 (GT_EXPR,</div><div> boolean_type_node, temp1, b)),</div><div> generate_fault (code),</div><div> NULL_TREE));</div><div>}</div><div><br></div><div><br></div><div><div>static void</div><div>m3cg_check_eq (void)</div><div>{</div><div> MTYPE2 (t, T);</div><div> INTEGER (code);</div><div><br></div><div> tree temp1 = declare_temp (t);</div><div> tree temp2 = declare_temp (t);</div><div><br></div><div> m3_store (temp1, 0, t, T, t, T);</div><div> m3_store (temp2, 0, t, T, t, T);</div><div> add_stmt (build3 (COND_EXPR, t_void,</div><div> m3_build2 (NE_EXPR, boolean_type_node, temp1, temp2),</div><div> generate_fault (code),</div><div> NULL_TREE));</div><div>}</div><div><br></div><div><br></div><div>seem kind of wasteful.</div><div><br></div><div><br></div><div> - Jay</div></div></div></div></div></div><br><br></div> </body>
</html>