diff options
author | Bryce McKinlay <bryce@albatross.co.nz> | 2000-12-24 00:43:40 +0000 |
---|---|---|
committer | Bryce McKinlay <bryce@gcc.gnu.org> | 2000-12-24 00:43:40 +0000 |
commit | d27fd99a031b87c810c1fec5f8a82ce5bfd791fc (patch) | |
tree | 933ecd6a4250e4eba29b9292dde0fe6fcd8d2d65 /gcc/java | |
parent | 93b0dee7798f3a068d5a3e1ea3a421829548f2b4 (diff) | |
download | gcc-d27fd99a031b87c810c1fec5f8a82ce5bfd791fc.zip gcc-d27fd99a031b87c810c1fec5f8a82ce5bfd791fc.tar.gz gcc-d27fd99a031b87c810c1fec5f8a82ce5bfd791fc.tar.bz2 |
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
Diffstat (limited to 'gcc/java')
-rw-r--r-- | gcc/java/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/java/decl.c | 2 | ||||
-rw-r--r-- | gcc/java/expr.c | 21 |
3 files changed, 26 insertions, 6 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 42a82bf..c52b529 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,12 @@ +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> Fix for PRs gcj/312 and gcj/253: diff --git a/gcc/java/decl.c b/gcc/java/decl.c index 0ed7170..df6b236 100644 --- a/gcc/java/decl.c +++ b/gcc/java/decl.c @@ -775,7 +775,7 @@ init_decl_processing () t = tree_cons (NULL_TREE, int_type_node, tree_cons (NULL_TREE, int_type_node, endlink)); soft_newarray_node - = builtin_function ("_Jv_NewArray", + = builtin_function ("_Jv_NewPrimArray", build_function_type(ptr_type_node, t), 0, NOT_BUILT_IN, NULL_PTR); DECL_IS_MALLOC (soft_newarray_node) = 1; diff --git a/gcc/java/expr.c b/gcc/java/expr.c index 5b90488..95a27fd 100644 --- a/gcc/java/expr.c +++ b/gcc/java/expr.c @@ -784,24 +784,35 @@ build_java_check_indexed_type (array_node, indexed_type) return indexed_type; } -/* newarray triggers a call to _Jv_NewArray. This function should be called - with an integer code (the type of array to create) and get from the stack - the size of the dimmension. */ +/* newarray triggers a call to _Jv_NewPrimArray. This function should be + called with an integer code (the type of array to create), and the length + of the array to create. */ tree build_newarray (atype_value, length) int atype_value; tree length; { + tree type_arg; + + tree prim_type = decode_newarray_type (atype_value); tree type - = build_java_array_type (decode_newarray_type (atype_value), + = build_java_array_type (prim_type, host_integerp (length, 0) == INTEGER_CST ? 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), build_address_of (soft_newarray_node), tree_cons (NULL_TREE, - build_int_2 (atype_value, 0), + type_arg, build_tree_list (NULL_TREE, length)), NULL_TREE); } |