<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>