Module Name: src Committed By: kalvisd Date: Sun Sep 29 11:49:43 UTC 2024
Modified Files: src/external/gpl3/gcc/dist/gcc/config/vax: vax.cc Log Message: gcc: vax: revise the expressions that may be valid index terms on VAX Multiplication of a constant and a register is commutative but the same is not true for left shifts. Only expressions where a register is shifted by a constant (and that where the constant is equal to the word size for the operand) can be valid index terms. OK rin@ To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/external/gpl3/gcc/dist/gcc/config/vax/vax.cc Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/gpl3/gcc/dist/gcc/config/vax/vax.cc diff -u src/external/gpl3/gcc/dist/gcc/config/vax/vax.cc:1.8 src/external/gpl3/gcc/dist/gcc/config/vax/vax.cc:1.9 --- src/external/gpl3/gcc/dist/gcc/config/vax/vax.cc:1.8 Sun Sep 29 11:45:31 2024 +++ src/external/gpl3/gcc/dist/gcc/config/vax/vax.cc Sun Sep 29 11:49:43 2024 @@ -1916,7 +1916,6 @@ static bool index_term_p (rtx prod, machine_mode mode, bool strict) { rtx xfoo0, xfoo1; - bool log_p; if (GET_MODE_SIZE (mode) == 1) return BASE_REGISTER_P (prod, strict); @@ -1925,18 +1924,24 @@ index_term_p (rtx prod, machine_mode mod || GET_MODE_SIZE (mode) > 8) return false; - log_p = GET_CODE (prod) == ASHIFT; xfoo0 = XEXP (prod, 0); xfoo1 = XEXP (prod, 1); - if (!log_p + if (GET_CODE (prod) == MULT && CONST_INT_P (xfoo0) && GET_MODE_SIZE (mode) == INTVAL (xfoo0) && INDEX_REGISTER_P (xfoo1, strict)) return true; - if (CONST_INT_P (xfoo1) - && GET_MODE_SIZE (mode) == (log_p ? 1 << INTVAL (xfoo1) : INTVAL (xfoo1)) + if (GET_CODE (prod) == MULT + && CONST_INT_P (xfoo1) + && GET_MODE_SIZE (mode) == INTVAL (xfoo1) + && INDEX_REGISTER_P (xfoo0, strict)) + return true; + + if (GET_CODE (prod) == ASHIFT + && CONST_INT_P (xfoo1) + && GET_MODE_SIZE (mode) == (1 << INTVAL (xfoo1)) && INDEX_REGISTER_P (xfoo0, strict)) return true;