Open64 (mfef90, whirl2f, and IR tools)
TAG: version-openad; SVN changeset: 916
|
00001 /* 00002 00003 Copyright (C) 2000, 2001 Silicon Graphics, Inc. All Rights Reserved. 00004 00005 This program is free software; you can redistribute it and/or modify it 00006 under the terms of version 2 of the GNU General Public License as 00007 published by the Free Software Foundation. 00008 00009 This program is distributed in the hope that it would be useful, but 00010 WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00012 00013 Further, this software is distributed without any warranty that it is 00014 free of the rightful claim of any third person regarding infringement 00015 or the like. Any license provided herein, whether implied or 00016 otherwise, applies only to this software file. Patent licenses, if 00017 any, provided herein do not apply to combinations of this program with 00018 other software, or any other product whatsoever. 00019 00020 You should have received a copy of the GNU General Public License along 00021 with this program; if not, write the Free Software Foundation, Inc., 59 00022 Temple Place - Suite 330, Boston MA 02111-1307, USA. 00023 00024 Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pky, 00025 Mountain View, CA 94043, or: 00026 00027 http://www.sgi.com 00028 00029 For further information regarding this notice, see: 00030 00031 http://oss.sgi.com/projects/GenInfo/NoticeExplan 00032 00033 */ 00034 00035 00036 00037 /* USMID: "\n@(#)5.0_pl/headers/s_call.h 5.1 04/29/99 21:22:31\n" */ 00038 00039 /***********************************************************\ 00040 |* These are the definitions for runtime argument checking *| 00041 |* descriptors. They must remain identical to the defs in *| 00042 |* argchck.c in libf90. DO NOT CHANGE THESE!!! *| 00043 \***********************************************************/ 00044 00045 enum arg_type_values { 00046 Null_Arg, 00047 Short_Integer_Arg, 00048 Long_Integer_Arg, 00049 Real_Arg, 00050 Double_Arg, 00051 Complex_Arg, 00052 Logical_Arg, 00053 Character_Arg, 00054 Pointer_Arg, 00055 Typeless_Arg, 00056 Character_Pointer_Arg, 00057 Label_Arg, 00058 Subroutine_Arg, 00059 Null_Function_Arg, 00060 Short_Integer_Function_Arg, 00061 Long_Integer_Function_Arg, 00062 Real_Function_Arg, 00063 Double_Function_Arg, 00064 Complex_Function_Arg, 00065 Logical_Function_Arg, 00066 Character_Function_Arg, 00067 Pointer_Function_Arg, 00068 Typeless_Function_Arg, 00069 Character_Pointer_Function_Arg, 00070 Subprogram_Arg, 00071 Derived_Type_Arg, 00072 Derived_Type_Function_Arg }; 00073 00074 typedef enum arg_type_values arg_type_type; 00075 00076 struct arg_desc_header { 00077 unsigned int seen_this : 1; 00078 unsigned int f90_flag : 1; 00079 unsigned int num_ck_only : 1; 00080 unsigned int suppress_msg: 1; 00081 unsigned int unused1 : 4; 00082 # ifdef _TARGET64 00083 unsigned int unused2 : 24; 00084 unsigned int unused3 : 8; 00085 # endif 00086 unsigned int arg_count : 24; 00087 }; 00088 00089 typedef struct arg_desc_header arg_desc_header_type; 00090 00091 struct arg_desc_node { 00092 long_type arg_type; 00093 long_type kind; 00094 00095 /* size is in terms of bytes for character, otherwise it's elements */ 00096 /* If it is assumed-size character, size is elements also. */ 00097 long_type size; 00098 00099 long_type char_len; 00100 long_type rank; 00101 long_type line; 00102 char name[32]; 00103 # ifdef _TARGET64 00104 unsigned int unused2 : 32; 00105 # endif 00106 unsigned int unused1 : 18; 00107 unsigned int pgm_unknown : 1; 00108 unsigned int pgm_unit : 1; 00109 unsigned int ignore_tkr : 1; 00110 unsigned int dope_vector : 1; 00111 unsigned int pointer : 1; 00112 unsigned int default_kind : 1; 00113 unsigned int optional : 1; 00114 unsigned int intent_out : 1; 00115 unsigned int assumed_shape : 1; 00116 unsigned int assumed_size_array: 1; 00117 unsigned int assumed_size_char : 1; 00118 unsigned int defineable : 1; 00119 unsigned int array_element : 1; 00120 unsigned int generic_call : 1; 00121 00122 long_type *derived_type_tbl; 00123 }; 00124 00125 00126 long argchck_suppress_msg[40]; 00127 int num_argchck_suppress_msg = 0; 00128 00129 typedef struct arg_desc_node arg_desc_node_type; 00130 00131 int linear_to_kind_type[Num_Linear_Types] = { 00132 /* Err_Res */ 0, 00133 /* Short_Char_Const */ 1, 00134 /* Short_Typeless_Const */ 0, 00135 /* Typeless_1 */ 0, 00136 /* Typeless_2 */ 0, 00137 /* Typeless_4 */ 0, 00138 /* Typeless_8 */ 0, 00139 /* Long_Typeless */ 0, 00140 /* Integer_1 */ 1, 00141 /* Integer_2 */ 2, 00142 /* Integer_4 */ 4, 00143 /* Integer_8 */ 8, 00144 /* Real_4 */ 4, 00145 /* Real_8 */ 8, 00146 /* Real_16 */ 16, 00147 /* Complex_4 */ 4, 00148 /* Complex_8 */ 8, 00149 /* Complex_16 */ 16, 00150 /* CRI_Ptr_8 */ 0, 00151 /* Logical_1 */ 1, 00152 /* Logical_2 */ 2, 00153 /* Logical_4 */ 4, 00154 /* Logical_8 */ 8, 00155 /* Character_1 */ 1, 00156 /* Character_2 */ 2, 00157 /* Character_4 */ 4, 00158 /* CRI_Ch_Ptr_8 */ 0, 00159 /* Structure_Type */ 0, 00160 /* CRI_Parcel_Ptr_8 */ 0 00161 }; 00162 00163 00164 00165 /********************************************************\ 00166 |* These are the final_arg_work tables that control the *| 00167 |* behavior of argument association. (ie. COPY IN/OUT) *| 00168 |* act_arg_values are in s_globals.h *| 00169 \********************************************************/ 00170 00171 enum dummy_arg_values { 00172 Unknown_Dummy, 00173 Scalar_Dummy, 00174 Sequence_Array_Dummy, 00175 Scalar_Ptr_Dummy, 00176 Array_Ptr_Dummy, 00177 Assumed_Shape_Dummy, 00178 Intrin_Dope_Dummy, 00179 Scalar_Target_Dummy, 00180 Array_Target_Dummy 00181 }; 00182 00183 typedef enum dummy_arg_values dummy_arg_type; 00184 00185 int arg_assoc_tbl[MAX_NUM_ACT_TYPES][MAX_NUM_DUMMY_TYPES] = { 00186 /* Scalar_Expression */ { 00187 /* Unknown_Dummy */ COPY_IN, 00188 /* Scalar_Dummy */ COPY_IN, 00189 /* Sequence_Array_Dummy */ ERROR_ASSOC, 00190 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00191 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00192 /* Assumed_Shape_Dummy */ ERROR_ASSOC, 00193 /* Intrin_Dope_Dummy */ COPY_IN_MAKE_DV, 00194 /* Scalar_Target_Dummy */ ERROR_ASSOC, 00195 /* Array_Target_Dummy */ ERROR_ASSOC 00196 }, 00197 /* Scalar_Var */ { 00198 /* Unknown_Dummy */ PASS_ADDRESS, 00199 /* Scalar_Dummy */ PASS_ADDRESS, 00200 /* Sequence_Array_Dummy */ PASS_ADDRESS, 00201 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00202 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00203 /* Assumed_Shape_Dummy */ ERROR_ASSOC, 00204 /* Intrin_Dope_Dummy */ MAKE_DV, 00205 /* Scalar_Target_Dummy */ MAKE_DV, 00206 /* Array_Target_Dummy */ ERROR_ASSOC 00207 }, 00208 /* Scalar_Tmp_Var */ { 00209 /* Unknown_Dummy */ PASS_ADDRESS, 00210 /* Scalar_Dummy */ PASS_ADDRESS, 00211 /* Sequence_Array_Dummy */ PASS_ADDRESS, 00212 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00213 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00214 /* Assumed_Shape_Dummy */ ERROR_ASSOC, 00215 /* Intrin_Dope_Dummy */ MAKE_DV, 00216 /* Scalar_Target_Dummy */ MAKE_DV, 00217 /* Array_Target_Dummy */ ERROR_ASSOC 00218 }, 00219 /* Array_Elt */ { 00220 /* Unknown_Dummy */ PASS_ADDRESS, 00221 /* Scalar_Dummy */ PASS_ADDRESS, 00222 /* Sequence_Array_Dummy */ PASS_ADDRESS, 00223 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00224 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00225 /* Assumed_Shape_Dummy */ ERROR_ASSOC, 00226 /* Intrin_Dope_Dummy */ MAKE_DV, 00227 /* Scalar_Target_Dummy */ MAKE_DV, 00228 /* Array_Target_Dummy */ ERROR_ASSOC 00229 }, 00230 /* Array_Tmp_Elt */ { 00231 /* Unknown_Dummy */ PASS_ADDRESS, 00232 /* Scalar_Dummy */ PASS_ADDRESS, 00233 /* Sequence_Array_Dummy */ PASS_ADDRESS, 00234 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00235 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00236 /* Assumed_Shape_Dummy */ ERROR_ASSOC, 00237 /* Intrin_Dope_Dummy */ MAKE_DV, 00238 /* Scalar_Target_Dummy */ MAKE_DV, 00239 /* Array_Target_Dummy */ ERROR_ASSOC 00240 }, 00241 /* Scalar_Ptr */ { 00242 /* Unknown_Dummy */ PASS_ADDRESS, 00243 /* Scalar_Dummy */ PASS_ADDRESS, 00244 /* Sequence_Array_Dummy */ ERROR_ASSOC, 00245 /* Scalar_Ptr_Dummy */ PASS_DV, 00246 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00247 /* Assumed_Shape_Dummy */ ERROR_ASSOC, 00248 /* Intrin_Dope_Dummy */ PASS_DV, 00249 /* Scalar_Target_Dummy */ PASS_DV, 00250 /* Array_Target_Dummy */ ERROR_ASSOC 00251 }, 00252 /* Scalar_Tmp_Ptr */ { 00253 /* Unknown_Dummy */ PASS_ADDRESS, 00254 /* Scalar_Dummy */ PASS_ADDRESS, 00255 /* Sequence_Array_Dummy */ ERROR_ASSOC, 00256 /* Scalar_Ptr_Dummy */ PASS_DV, 00257 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00258 /* Assumed_Shape_Dummy */ ERROR_ASSOC, 00259 /* Intrin_Dope_Dummy */ PASS_DV, 00260 /* Scalar_Target_Dummy */ PASS_DV, 00261 /* Array_Target_Dummy */ ERROR_ASSOC 00262 }, 00263 /* Scalar_Constant */ { 00264 /* Unknown_Dummy */ COPY_IN, 00265 /* Scalar_Dummy */ COPY_IN, 00266 /* Sequence_Array_Dummy */ ERROR_ASSOC, 00267 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00268 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00269 /* Assumed_Shape_Dummy */ ERROR_ASSOC, 00270 /* Intrin_Dope_Dummy */ COPY_IN_MAKE_DV, 00271 /* Scalar_Target_Dummy */ ERROR_ASSOC, 00272 /* Array_Target_Dummy */ ERROR_ASSOC 00273 }, 00274 /* Array_Expr */ { 00275 /* Unknown_Dummy */ COPY_IN, 00276 /* Scalar_Dummy */ ERROR_ASSOC, 00277 /* Sequence_Array_Dummy */ COPY_IN, 00278 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00279 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00280 /* Assumed_Shape_Dummy */ COPY_IN_MAKE_DV, 00281 /* Intrin_Dope_Dummy */ COPY_IN_MAKE_DV, 00282 /* Scalar_Target_Dummy */ ERROR_ASSOC, 00283 /* Array_Target_Dummy */ ERROR_ASSOC 00284 }, 00285 /* Array_Ptr */ { 00286 /* Unknown_Dummy */ CHECK_CONTIG_FLAG, 00287 /* Scalar_Dummy */ ERROR_ASSOC, 00288 /* Sequence_Array_Dummy */ CHECK_CONTIG_FLAG, 00289 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00290 /* Array_Ptr_Dummy */ PASS_DV, 00291 /* Assumed_Shape_Dummy */ PASS_DV_COPY, 00292 /* Intrin_Dope_Dummy */ PASS_DV, 00293 /* Scalar_Target_Dummy */ ERROR_ASSOC, 00294 /* Array_Target_Dummy */ PASS_DV_COPY 00295 }, 00296 /* Array_Tmp_Ptr */ { 00297 /* Unknown_Dummy */ CHECK_CONTIG_FLAG, 00298 /* Scalar_Dummy */ ERROR_ASSOC, 00299 /* Sequence_Array_Dummy */ CHECK_CONTIG_FLAG, 00300 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00301 /* Array_Ptr_Dummy */ PASS_DV, 00302 /* Assumed_Shape_Dummy */ PASS_DV_COPY, 00303 /* Intrin_Dope_Dummy */ PASS_DV, 00304 /* Scalar_Target_Dummy */ ERROR_ASSOC, 00305 /* Array_Target_Dummy */ PASS_DV_COPY 00306 }, 00307 /* Whole_Allocatable */ { 00308 /* Unknown_Dummy */ PASS_ADDRESS, 00309 /* Scalar_Dummy */ ERROR_ASSOC, 00310 /* Sequence_Array_Dummy */ PASS_ADDRESS, 00311 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00312 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00313 /* Assumed_Shape_Dummy */ PASS_DV_COPY, 00314 /* Intrin_Dope_Dummy */ PASS_DV, 00315 /* Scalar_Target_Dummy */ ERROR_ASSOC, 00316 /* Array_Target_Dummy */ PASS_DV_COPY 00317 }, 00318 /* Whole_Tmp_Allocatable */ { 00319 /* Unknown_Dummy */ PASS_ADDRESS, 00320 /* Scalar_Dummy */ ERROR_ASSOC, 00321 /* Sequence_Array_Dummy */ PASS_ADDRESS, 00322 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00323 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00324 /* Assumed_Shape_Dummy */ PASS_DV_COPY, 00325 /* Intrin_Dope_Dummy */ PASS_DV, 00326 /* Scalar_Target_Dummy */ ERROR_ASSOC, 00327 /* Array_Target_Dummy */ PASS_DV_COPY 00328 }, 00329 /* Whole_Sequence */ { 00330 /* Unknown_Dummy */ PASS_ADDRESS, 00331 /* Scalar_Dummy */ ERROR_ASSOC, 00332 /* Sequence_Array_Dummy */ PASS_ADDRESS, 00333 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00334 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00335 /* Assumed_Shape_Dummy */ MAKE_DV, 00336 /* Intrin_Dope_Dummy */ MAKE_DV, 00337 /* Scalar_Target_Dummy */ ERROR_ASSOC, 00338 /* Array_Target_Dummy */ MAKE_DV 00339 }, 00340 /* Whole_Tmp_Sequence */ { 00341 /* Unknown_Dummy */ PASS_ADDRESS, 00342 /* Scalar_Dummy */ ERROR_ASSOC, 00343 /* Sequence_Array_Dummy */ PASS_ADDRESS, 00344 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00345 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00346 /* Assumed_Shape_Dummy */ MAKE_DV, 00347 /* Intrin_Dope_Dummy */ MAKE_DV, 00348 /* Scalar_Target_Dummy */ ERROR_ASSOC, 00349 /* Array_Target_Dummy */ MAKE_DV 00350 }, 00351 /* Whole_Ass_Shape */ { 00352 /* Unknown_Dummy */ CHECK_CONTIG_FLAG, 00353 /* Scalar_Dummy */ ERROR_ASSOC, 00354 /* Sequence_Array_Dummy */ CHECK_CONTIG_FLAG, 00355 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00356 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00357 /* Assumed_Shape_Dummy */ PASS_DV_COPY, 00358 /* Intrin_Dope_Dummy */ PASS_DV, 00359 /* Scalar_Target_Dummy */ ERROR_ASSOC, 00360 /* Array_Target_Dummy */ PASS_DV_COPY 00361 }, 00362 /* Whole_Array_Constant */ { 00363 /* Unknown_Dummy */ COPY_IN, 00364 /* Scalar_Dummy */ ERROR_ASSOC, 00365 /* Sequence_Array_Dummy */ COPY_IN, 00366 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00367 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00368 /* Assumed_Shape_Dummy */ COPY_IN_MAKE_DV, 00369 /* Intrin_Dope_Dummy */ COPY_IN_MAKE_DV, 00370 /* Scalar_Target_Dummy */ ERROR_ASSOC, 00371 /* Array_Target_Dummy */ ERROR_ASSOC 00372 }, 00373 /* Sequence_Array_Section */ { 00374 /* Unknown_Dummy */ COPY_IN_COPY_OUT, 00375 /* Scalar_Dummy */ ERROR_ASSOC, 00376 /* Sequence_Array_Dummy */ COPY_IN_COPY_OUT, 00377 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00378 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00379 /* Assumed_Shape_Dummy */ MAKE_DV, 00380 /* Intrin_Dope_Dummy */ MAKE_DV, 00381 /* Scalar_Target_Dummy */ ERROR_ASSOC, 00382 /* Array_Target_Dummy */ MAKE_DV 00383 }, 00384 /* Constant_Array_Section */ { 00385 /* Unknown_Dummy */ COPY_IN, 00386 /* Scalar_Dummy */ ERROR_ASSOC, 00387 /* Sequence_Array_Dummy */ COPY_IN, 00388 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00389 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00390 /* Assumed_Shape_Dummy */ COPY_IN_MAKE_DV, 00391 /* Intrin_Dope_Dummy */ COPY_IN_MAKE_DV, 00392 /* Scalar_Target_Dummy */ ERROR_ASSOC, 00393 /* Array_Target_Dummy */ ERROR_ASSOC 00394 }, 00395 /* Dv_Array_Section */ { 00396 /* Unknown_Dummy */ COPY_IN_COPY_OUT, 00397 /* Scalar_Dummy */ ERROR_ASSOC, 00398 /* Sequence_Array_Dummy */ COPY_IN_COPY_OUT, 00399 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00400 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00401 /* Assumed_Shape_Dummy */ MAKE_DV, 00402 /* Intrin_Dope_Dummy */ MAKE_DV, 00403 /* Scalar_Target_Dummy */ ERROR_ASSOC, 00404 /* Array_Target_Dummy */ MAKE_DV 00405 }, 00406 /* Vector_Subscript_Section */ { 00407 /* Unknown_Dummy */ COPY_IN, 00408 /* Scalar_Dummy */ ERROR_ASSOC, 00409 /* Sequence_Array_Dummy */ COPY_IN, 00410 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00411 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00412 /* Assumed_Shape_Dummy */ COPY_IN_MAKE_DV, 00413 /* Intrin_Dope_Dummy */ COPY_IN_MAKE_DV, 00414 /* Scalar_Target_Dummy */ ERROR_ASSOC, 00415 /* Array_Target_Dummy */ ERROR_ASSOC 00416 }, 00417 00418 /* Contig_Section */ { 00419 /* Unknown_Dummy */ PASS_SECTION_ADDRESS, 00420 /* Scalar_Dummy */ ERROR_ASSOC, 00421 /* Sequence_Array_Dummy */ PASS_SECTION_ADDRESS, 00422 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00423 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00424 /* Assumed_Shape_Dummy */ MAKE_DV, 00425 /* Intrin_Dope_Dummy */ MAKE_DV, 00426 /* Scalar_Target_Dummy */ ERROR_ASSOC, 00427 /* Array_Target_Dummy */ MAKE_DV 00428 }, 00429 00430 /* Dv_Contig_Section */ { 00431 /* Unknown_Dummy */ CHECK_CONTIG_FLAG, 00432 /* Scalar_Dummy */ ERROR_ASSOC, 00433 /* Sequence_Array_Dummy */ CHECK_CONTIG_FLAG, 00434 /* Scalar_Ptr_Dummy */ ERROR_ASSOC, 00435 /* Array_Ptr_Dummy */ ERROR_ASSOC, 00436 /* Assumed_Shape_Dummy */ MAKE_DV, 00437 /* Intrin_Dope_Dummy */ MAKE_DV, 00438 /* Scalar_Target_Dummy */ ERROR_ASSOC, 00439 /* Array_Target_Dummy */ MAKE_DV 00440 }, 00441 }; 00442 00443 00444 /******************************************************\ 00445 |* globally accessible objects defined in s_call.c *| 00446 \******************************************************/ 00447 00448 arg_strct_type *arg_info_list; 00449 int *arg_list; 00450 int arg_list_size = 0; 00451 int arg_info_list_size = 0; 00452 int arg_info_list_base = NULL_IDX; 00453 int arg_info_list_top = NULL_IDX; 00454 00455 arg_strct_type init_arg_info; 00456 expr_arg_type init_exp_desc; 00457 00458 /**********************************************************************\ 00459 |* This variable keeps track of the original sh idx of stmt with call *| 00460 \**********************************************************************/ 00461 00462 int orig_sh_idx = NULL_IDX; 00463 boolean keep_orig_sh = FALSE;