Commit d27fd99a by Bryce McKinlay Committed by Bryce McKinlay

Shorten primitive array allocation path:

        * decl.c (init_decl_processing): Use _Jv_NewPrimArray not _Jv_NewArray
        to create new primitive arrays.
        * expr.c (build_newarray): If generating native code, call
        soft_newarray_node with a reference to the primitive TYPE identifier
        instead of type_value.

From-SVN: r38482
parent 93b0dee7
2000-12-22 Bryce McKinlay <bryce@albatross.co.nz>
Shorten primitive array allocation path:
* decl.c (init_decl_processing): Use _Jv_NewPrimArray not _Jv_NewArray
to create new primitive arrays.
* expr.c (build_newarray): If generating native code, call
soft_newarray_node with a reference to the primitive TYPE identifier
instead of type_value.
2000-12-17 Bryce McKinlay <bryce@albatross.co.nz> 2000-12-17 Bryce McKinlay <bryce@albatross.co.nz>
Fix for PRs gcj/312 and gcj/253: Fix for PRs gcj/312 and gcj/253:
......
...@@ -775,7 +775,7 @@ init_decl_processing () ...@@ -775,7 +775,7 @@ init_decl_processing ()
t = tree_cons (NULL_TREE, int_type_node, t = tree_cons (NULL_TREE, int_type_node,
tree_cons (NULL_TREE, int_type_node, endlink)); tree_cons (NULL_TREE, int_type_node, endlink));
soft_newarray_node soft_newarray_node
= builtin_function ("_Jv_NewArray", = builtin_function ("_Jv_NewPrimArray",
build_function_type(ptr_type_node, t), build_function_type(ptr_type_node, t),
0, NOT_BUILT_IN, NULL_PTR); 0, NOT_BUILT_IN, NULL_PTR);
DECL_IS_MALLOC (soft_newarray_node) = 1; DECL_IS_MALLOC (soft_newarray_node) = 1;
......
...@@ -784,24 +784,35 @@ build_java_check_indexed_type (array_node, indexed_type) ...@@ -784,24 +784,35 @@ build_java_check_indexed_type (array_node, indexed_type)
return indexed_type; return indexed_type;
} }
/* newarray triggers a call to _Jv_NewArray. This function should be called /* newarray triggers a call to _Jv_NewPrimArray. This function should be
with an integer code (the type of array to create) and get from the stack called with an integer code (the type of array to create), and the length
the size of the dimmension. */ of the array to create. */
tree tree
build_newarray (atype_value, length) build_newarray (atype_value, length)
int atype_value; int atype_value;
tree length; tree length;
{ {
tree type_arg;
tree prim_type = decode_newarray_type (atype_value);
tree type tree type
= build_java_array_type (decode_newarray_type (atype_value), = build_java_array_type (prim_type,
host_integerp (length, 0) == INTEGER_CST host_integerp (length, 0) == INTEGER_CST
? tree_low_cst (length, 0) : -1); ? tree_low_cst (length, 0) : -1);
/* If compiling to native, pass a reference to the primitive type class
and save the runtime some work. However, the bytecode generator
expects to find the type_code int here. */
if (flag_emit_class_files)
type_arg = build_int_2 (atype_value, 0);
else
type_arg = build_class_ref (prim_type);
return build (CALL_EXPR, promote_type (type), return build (CALL_EXPR, promote_type (type),
build_address_of (soft_newarray_node), build_address_of (soft_newarray_node),
tree_cons (NULL_TREE, tree_cons (NULL_TREE,
build_int_2 (atype_value, 0), type_arg,
build_tree_list (NULL_TREE, length)), build_tree_list (NULL_TREE, length)),
NULL_TREE); NULL_TREE);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment