diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b1625e2..fc53c029 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ foreach(lang ${languages}) endforeach() # Defaults -set(version V6.2-002) +set(version V6.2-002A) if("${version}" STREQUAL "") set(version V9.9-0) endif() @@ -422,7 +422,9 @@ endforeach() # TODO: find_package or find_library for system libs? include_directories (/usr/local/include) target_link_libraries(libmumps ${libmumpslibs}) -add_dependencies(libmumps gen_gtm_threadgbl_deftypes) +if(gen_xfer_desc) + add_dependencies(libmumps gen_xfer_desc) +endif() add_executable(mumps ${mumps_SOURCES}) target_link_libraries(mumps libmumps) diff --git a/README b/README index aab5a152..e5a803f8 100644 --- a/README +++ b/README @@ -35,11 +35,11 @@ To build GT.M for Linux, do the following steps: from http://sourceforge.net/projects/fis-gtm/ Unpack the tar file and run the configure script as root. Note: the tar file unpacks everything into your current working directory, not a new subdirectory. The Linux Standard - Base (LSB) install path for GT.M V6.2-002 is /opt/fis-gtm/V6.2-002_i586 or - /opt/fis-gtm/V6.2-002_x8664. These instructions are written using x8664, please + Base (LSB) install path for GT.M V6.2-002A is /opt/fis-gtm/V6.2-002A_i586 or + /opt/fis-gtm/V6.2-002A_x8664. These instructions are written using x8664, please use i586 as necessary. - $ tar xfz gtm_V62002_linux_x8664_pro.tar.gz + $ tar xfz gtm_V62002A_linux_x8664_pro.tar.gz # Note down the installation path for use with cmake below @@ -47,16 +47,16 @@ To build GT.M for Linux, do the following steps: 2. Unpack the GT.M sources The GT.M source tarball extracts to a directory with the version number in - the name, fis-gtm-V6.2-002 - $ tar xfz fis-gtm-V6.2-002.tar.gz - $ cd fis-gtm-V6.2-002 + the name, fis-gtm-V6.2-002A + $ tar xfz fis-gtm-V6.2-002A.tar.gz + $ cd fis-gtm-V6.2-002A You should find this README, LICENSE, COPYING and CMakeLists.txt file and sr_* source directories. 3. Building GT.M - can be a sub directory of the source directory, - fis-gtm-V6.2-002, or any other valid path. + fis-gtm-V6.2-002A, or any other valid path. $ mkdir $ cd @@ -75,16 +75,16 @@ To build GT.M for Linux, do the following steps: # # -D CMAKE_INSTALL_PREFIX:PATH=${PWD}/package # - $ cmake -D CMAKE_INSTALL_PREFIX:PATH=${PWD}/package /fis-gtm-V6.2-002 + $ cmake -D CMAKE_INSTALL_PREFIX:PATH=${PWD}/package /fis-gtm-V6.2-002A $ make $ make install - $ cd package/lib/fis-gtm/V6.2-002_x86_64 + $ cd package/lib/fis-gtm/V6.2-002A_x86_64 # Now you are ready to install GT.M. Answer a few questions and install it. - # The recommended installation path is /opt/fis-gtm/V6.2-002_x86_64 + # The recommended installation path is /opt/fis-gtm/V6.2-002A_x86_64 $ sudo ./configure diff --git a/sr_i386/gtm_threadgbl_deftypes.h b/sr_i386/gtm_threadgbl_deftypes.h index e2b4a28d..88eced21 100644 --- a/sr_i386/gtm_threadgbl_deftypes.h +++ b/sr_i386/gtm_threadgbl_deftypes.h @@ -10,7 +10,7 @@ * * ****************************************************************/ -/* Generated by /usr/library/V62002/tools/gen_gtm_threadgbl_deftypes.csh */ +/* Generated by /usr/library/V62002A/tools/gen_gtm_threadgbl_deftypes.csh */ #ifndef GTM_THREADGBL_DEFTYPES_INCLUDED #define GTM_THREADGBL_DEFTYPES_INCLUDED diff --git a/sr_linux/release_name.h b/sr_linux/release_name.h index 4f434e07..6977231e 100644 --- a/sr_linux/release_name.h +++ b/sr_linux/release_name.h @@ -10,15 +10,15 @@ ****************************************************************/ #ifdef __CYGWIN__ -#define GTM_RELEASE_NAME "GT.M V6.2-002 CYGWIN x86" +#define GTM_RELEASE_NAME "GT.M V6.2-002A CYGWIN x86" #elif defined(__ia64) -#define GTM_RELEASE_NAME "GT.M V6.2-002 Linux IA64" +#define GTM_RELEASE_NAME "GT.M V6.2-002A Linux IA64" #elif defined(__x86_64__) -#define GTM_RELEASE_NAME "GT.M V6.2-002 Linux x86_64" +#define GTM_RELEASE_NAME "GT.M V6.2-002A Linux x86_64" #elif defined(__s390__) -#define GTM_RELEASE_NAME "GT.M V6.2-002 Linux S390X" +#define GTM_RELEASE_NAME "GT.M V6.2-002A Linux S390X" #else -#define GTM_RELEASE_NAME "GT.M V6.2-002 Linux x86" +#define GTM_RELEASE_NAME "GT.M V6.2-002A Linux x86" #endif #define GTM_PRODUCT "GT.M" #define GTM_VERSION "V6.2" diff --git a/sr_port/actuallist.c b/sr_port/actuallist.c index cc8c3d0a..a350e796 100644 --- a/sr_port/actuallist.c +++ b/sr_port/actuallist.c @@ -1,6 +1,7 @@ /**************************************************************** * * - * Copyright 2001, 2013 Fidelity Information Services, Inc * + * Copyright (c) 2001-2015 Fidelity National Information * + * Services, Inc. and/or its subsidiaries. All rights reserved. * * * * This source code contains the intellectual property * * of its copyright holder(s), and is made available * @@ -106,7 +107,7 @@ error_def(ERR_SIDEEFFECTEVAL); if ((1 < parmcount) && (TREF(side_effect_base))[TREF(expr_depth)]) { /* at least two arguments and at least one side effect - look for lvns needing protection */ assert(OLD_SE != TREF(side_effect_handling)); - se_warn = (!run_time && (SE_WARN == TREF(side_effect_handling))); + se_warn = SE_WARN_ON; for (i = 0, j = parmcount, ref0 = counttrip->operand[1].oprval.tref; --j; ref0 = ref0->operand[1].oprval.tref) { /* no need to do the last argument - can't have a side effect after it */ diff --git a/sr_port/compiler.h b/sr_port/compiler.h index 052630a9..11872b03 100644 --- a/sr_port/compiler.h +++ b/sr_port/compiler.h @@ -243,6 +243,7 @@ typedef struct * PostConditionals can cause this path to be avoided in which case we do not want to issue an error at compile time. * Therefore issue only a warning at compile-time and proceed with compilation as if this codepath will not be reached at runtime. */ +error_def(ERR_BOOLSIDEFFECT); error_def(ERR_DEVPARINAP); error_def(ERR_DEVPARUNK); error_def(ERR_DEVPARVALREQ); @@ -353,9 +354,8 @@ typedef struct newtriple(OC_GVRECTARG)->operand[0] = put_tref(TREF(expr_start)); \ } -/* note assignment below and that it always occurs */ -#define SHIFT_SIDE_EFFECTS ((TREF(saw_side_effect) = TREF(shift_side_effects)) \ - && (NULL != TREF(expr_start)) && (GTM_BOOL == TREF(gtm_fullbool))) +/* note assignment below */ +#define SHIFT_SIDE_EFFECTS ((TREF(saw_side_effect) = TREF(shift_side_effects)) && (GTM_BOOL == TREF(gtm_fullbool))) #define INITIAL_SIDE_EFFECT_DEPTH 33 /* initial allocation for expression nesting to track side effects */ diff --git a/sr_port/eval_expr.c b/sr_port/eval_expr.c index 341ba04a..1ae54e75 100644 --- a/sr_port/eval_expr.c +++ b/sr_port/eval_expr.c @@ -1,6 +1,7 @@ /**************************************************************** * * - * Copyright 2001, 2013 Fidelity Information Services, Inc * + * Copyright (c) 2001-2015 Fidelity National Information * + * Services, Inc. and/or its subsidiaries. All rights reserved. * * * * This source code contains the intellectual property * * of its copyright holder(s), and is made available * @@ -47,7 +48,7 @@ int eval_expr(oprtype *a) return EXPR_FAIL; } se_handling = TREF(side_effect_handling); - se_warn = (!run_time && (SE_WARN == se_handling)); + se_warn = SE_WARN_ON; while (bin_opcode = tokentable[TREF(window_token)].bo_type) /* NOTE assignment NOT condition */ { type = tokentable[TREF(window_token)].opr_type; diff --git a/sr_port/expritem.c b/sr_port/expritem.c index fddee391..f19c5ea9 100644 --- a/sr_port/expritem.c +++ b/sr_port/expritem.c @@ -27,7 +27,6 @@ GBLREF bool devctlexp; GBLREF boolean_t run_time; -error_def(ERR_BOOLSIDEFFECT); error_def(ERR_EXPR); error_def(ERR_FCNSVNEXPECTED); error_def(ERR_FNOTONSYS); @@ -705,7 +704,7 @@ int expritem(oprtype *a) if (!saw_se) /* might have lucked out on ordering */ saw_local = FALSE; /* just clear the backptrs - shut off other processing */ saw_se = FALSE; - se_warn = (!run_time && (SE_WARN == TREF(side_effect_handling))); + se_warn = SE_WARN_ON; dqloop(funcbp, que, tripbp) { /* work chained arguments which are in reverse order */ argtrip = tripbp->bpt; diff --git a/sr_port/f_name.c b/sr_port/f_name.c index 13cf1a31..b2f685b5 100644 --- a/sr_port/f_name.c +++ b/sr_port/f_name.c @@ -1,6 +1,7 @@ /**************************************************************** * * - * Copyright 2001, 2014 Fidelity Information Services, Inc * + * Copyright (c) 2001-2015 Fidelity National Information * + * Services, Inc. and/or its subsidiaries. All rights reserved. * * * * This source code contains the intellectual property * * of its copyright holder(s), and is made available * @@ -76,7 +77,7 @@ int f_name(oprtype *a, opctype op) column = source_column; if (EXPR_FAIL == expr(depth, MUMPS_STR)) return FALSE; - if (!run_time && (OC_INDFNNAME2 == r->opcode) && (SE_WARN == TREF(side_effect_handling))) + if (SE_WARN_ON && (OC_INDFNNAME2 == r->opcode)) ISSUE_SIDEEFFECTEVAL_WARNING(column - 1); } coerce(depth, OCT_MVAL); diff --git a/sr_port/f_select.c b/sr_port/f_select.c index 3da7b1ec..47d60c3e 100644 --- a/sr_port/f_select.c +++ b/sr_port/f_select.c @@ -35,7 +35,7 @@ LITREF octabstruct oc_tab[]; int f_select(oprtype *a, opctype op) { - boolean_t first_time, save_saw_side, *save_se_base, save_shift, shifting, we_saw_side_effect = FALSE; + boolean_t first_time, save_saw_side, saw_se_in_select, *save_se_base, save_shift, shifting, gvn_or_indir_in_select; opctype old_op; oprtype *cnd, endtrip, target, tmparg; triple *oldchain, *r, *ref, *save_start, *save_start_orig, tmpchain, *triptr; @@ -60,7 +60,8 @@ int f_select(oprtype *a, opctype op) { dqinit(&tmpchain, exorder); oldchain = setcurtchain(&tmpchain); - INCREMENT_EXPR_DEPTH; /* Don't want to hit botton with each expression, so start at 1 rather than 0 */ + INCREMENT_EXPR_DEPTH; /* Don't want to hit bottom with each expression, so start at 1 rather than 0 */ + TREF(expr_start) = TREF(expr_start_orig) = &tmpchain; TREF(shift_side_effects) = TRUE; } else TREF(shift_side_effects) = FALSE; @@ -130,44 +131,38 @@ int f_select(oprtype *a, opctype op) ref->operand[0] = tmparg; ref->operand[1] = put_ilit(FALSE); /* Not a subroutine reference */ ins_triple(r); + saw_se_in_select = TREF(saw_side_effect); /* note this down before it gets reset by DECREMENT_EXPR_DEPTH */ if (shifting) - { - assert(1 == TREF(expr_depth)); - we_saw_side_effect = TREF(saw_side_effect); - save_se_base[save_expr_depth] |= (TREF(side_effect_base))[1]; DECREMENT_EXPR_DEPTH; /* Clean up */ - } assert(!TREF(expr_depth)); + gvn_or_indir_in_select = (TREF(expr_start) != TREF(expr_start_orig)); TREF(expr_start) = save_start; TREF(expr_start_orig) = save_start_orig; - TREF(saw_side_effect) = save_saw_side; TREF(shift_side_effects) = save_shift; - SELECT_CLEANUP; - TREF(expr_depth) = save_expr_depth; + save_se_base[save_expr_depth] |= (TREF(side_effect_base))[TREF(expr_depth)]; + TREF(saw_side_effect) = saw_se_in_select | save_saw_side; + SELECT_CLEANUP; /* restores TREF(expr_depth), TREF(side_effect_base) and TREF(side_effect_depth) */ if (shifting) - { /* We have built a separate chain so decide what to do with it */ - if (we_saw_side_effect || (GTM_BOOL != TREF(gtm_fullbool)) - || ((save_start != save_start_orig) && (OC_NOOP != save_start->opcode))) - { /* Only play this game if a side effect requires it */ - newtriple(OC_GVSAVTARG); /* Need 1 of these at expr_start */ + { + if (!gvn_or_indir_in_select && ((GTM_BOOL == TREF(gtm_fullbool)) || !saw_se_in_select)) + { setcurtchain(oldchain); - TREF(saw_side_effect) |= we_saw_side_effect; - if (NULL == save_start) - { /* If this chain is new, look back for a pre-boolean place to put it */ - for (ref = (TREF(curtchain))->exorder.bl; - (ref != TREF(curtchain)) && oc_tab[ref->opcode].octype & OCT_BOOL; ref = ref->exorder.bl) - ; - TREF(expr_start) = TREF(expr_start_orig) = ref; - } - dqadd(TREF(expr_start), &tmpchain, exorder); - TREF(expr_start) = tmpchain.exorder.bl; - triptr = newtriple(OC_GVRECTARG); - triptr->operand[0] = put_tref(TREF(expr_start)); + triptr = (TREF(curtchain))->exorder.bl; + dqadd(triptr, &tmpchain, exorder); /* this is a violation of info hiding */ } else - { /* Just put it where it would "naturally" go */ + { + shifting = ((TREF(expr_start) != TREF(expr_start_orig)) && (OC_NOOP != (TREF(expr_start))->opcode)); + newtriple(shifting ? OC_GVSAVTARG : OC_NOOP); /* must have one of these two at expr_start */ setcurtchain(oldchain); - triptr = (TREF(curtchain))->exorder.bl; - dqadd(triptr, &tmpchain, exorder); + assert(NULL != TREF(expr_start)); + dqadd(TREF(expr_start), &tmpchain, exorder); + TREF(expr_start) = tmpchain.exorder.bl; + if (shifting) + { /* only play this game if something else started it */ + assert(OC_GVSAVTARG == (TREF(expr_start))->opcode); + triptr = newtriple(OC_GVRECTARG); + triptr->operand[0] = put_tref(TREF(expr_start)); + } } } *a = put_tref(r); diff --git a/sr_port/gvn.c b/sr_port/gvn.c index db7e6c30..41c72209 100644 --- a/sr_port/gvn.c +++ b/sr_port/gvn.c @@ -32,7 +32,7 @@ error_def(ERR_SIDEEFFECTEVAL); int gvn(void) { - boolean_t in_select = FALSE, parse_status, shifting, vbar; + boolean_t parse_status, shifting, vbar; char x; int hash_code; opctype ox; @@ -45,7 +45,7 @@ int gvn(void) advancewindow(); sb1 = sb2 = subscripts; ox = 0; - if (shifting = (TREF(shift_side_effects) && (!TREF(saw_side_effect) || ((GTM_BOOL == TREF(gtm_fullbool)) + if (shifting = (TREF(shift_side_effects) && (!TREF(saw_side_effect) || (GTM_BOOL == TREF(gtm_fullbool) && (OLD_SE == TREF(side_effect_handling)))))) { /* NOTE assignment above */ dqinit(&tmpchain, exorder); @@ -54,7 +54,7 @@ int gvn(void) if ((TK_LBRACKET == TREF(window_token)) || (TK_VBAR == TREF(window_token))) { assert(sb2 == sb1); - /* Set "hash_code" as the first operand so OC_GVEXTNAM has it passed in at same spot as op_gvname */ + /* set "hash_code" as the first operand so OC_GVEXTNAM has it passed in at same spot as op_gvname */ sb1++; vbar = (TK_VBAR == TREF(window_token)); advancewindow(); @@ -102,7 +102,7 @@ int gvn(void) ox = OC_GVNAME; *sb1++ = put_ilit((mint)hash_code); } else - *sb2 = put_ilit((mint)hash_code); /* Fill in hash_code in the space previously set aside */ + *sb2 = put_ilit((mint)hash_code); /* fill in hash_code in the space previously set aside */ *sb1++ = put_str((TREF(window_ident)).addr, (TREF(window_ident)).len); advancewindow(); } else @@ -121,7 +121,7 @@ int gvn(void) return FALSE; } ox = OC_GVNAKED; - /* Pass in a dummy hash_code in case of OC_GVNAKED. We need this so op_gvname_fast, op_gvextnam_fast and + /* pass in a dummy hash_code in case of OC_GVNAKED. We need this so op_gvname_fast, op_gvextnam_fast and * op_gvnaked_fast have the same call interface. op_savgvn.c relies on this to replace OC_GVNAME, OC_GVEXTNAM * or OC_GVNAKED opcodes with a OC_SAVGVN opcode. */ @@ -169,11 +169,8 @@ int gvn(void) SUBS_ARRAY_2_TRIPLES(ref, sb1, sb2, subscripts, 0); if (shifting) { - if (NULL == TREF(expr_start)) - TREF(saw_side_effect) = in_select = TRUE; /* Special case relied on by f_select */ - if (in_select - || (TREF(saw_side_effect) && ((GTM_BOOL != TREF(gtm_fullbool)) || (OLD_SE != TREF(side_effect_handling))))) - { /* Saw a side effect in a subscript - time to stop shifting */ + if (TREF(saw_side_effect) && ((GTM_BOOL != TREF(gtm_fullbool)) || (OLD_SE != TREF(side_effect_handling)))) + { /* saw a side effect in a subscript - time to stop shifting */ setcurtchain(oldchain); triptr = (TREF(curtchain))->exorder.bl; dqadd(triptr, &tmpchain, exorder); diff --git a/sr_port/indirection.c b/sr_port/indirection.c index 0403639a..127b793b 100644 --- a/sr_port/indirection.c +++ b/sr_port/indirection.c @@ -27,7 +27,6 @@ GBLREF spdesc stringpool; GBLREF unsigned char *source_buffer; GBLREF int source_column; -error_def(ERR_BOOLSIDEFFECT); error_def(ERR_EXPR); error_def(ERR_LPARENMISSING); error_def(ERR_MAXNRSUBSCRIPTS); diff --git a/sr_unix/CMakeLists.txt b/sr_unix/CMakeLists.txt index 8eb73a87..ff20b27c 100644 --- a/sr_unix/CMakeLists.txt +++ b/sr_unix/CMakeLists.txt @@ -422,7 +422,9 @@ endforeach() # TODO: find_package or find_library for system libs? include_directories (/usr/local/include) target_link_libraries(libmumps ${libmumpslibs}) -add_dependencies(libmumps gen_gtm_threadgbl_deftypes) +if(gen_xfer_desc) + add_dependencies(libmumps gen_xfer_desc) +endif() add_executable(mumps ${mumps_SOURCES}) target_link_libraries(mumps libmumps) diff --git a/sr_x86_64/gtm_threadgbl_deftypes.h b/sr_x86_64/gtm_threadgbl_deftypes.h index bd357236..74a3951c 100644 --- a/sr_x86_64/gtm_threadgbl_deftypes.h +++ b/sr_x86_64/gtm_threadgbl_deftypes.h @@ -10,7 +10,7 @@ * * ****************************************************************/ -/* Generated by /usr/library/V62002/tools/gen_gtm_threadgbl_deftypes.csh */ +/* Generated by /usr/library/V62002A/tools/gen_gtm_threadgbl_deftypes.csh */ #ifndef GTM_THREADGBL_DEFTYPES_INCLUDED #define GTM_THREADGBL_DEFTYPES_INCLUDED