always define WORD_REGISTER_OPERATIONS
authorTrevor Saunders <tbsaunde+gcc@tbsaunde.org>
Thu, 9 Jul 2015 02:51:19 +0000 (02:51 +0000)
committerTrevor Saunders <tbsaunde@gcc.gnu.org>
Thu, 9 Jul 2015 02:51:19 +0000 (02:51 +0000)
gcc/ChangeLog:

2015-07-08  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

* defaults.h: Provide default for WORD_REGISTER_OPERATIONS.
* config/alpha/alpha.h: Define WORD_REGISTER_OPERATIONS to 1.
* config/arc/arc.h: Likewise.
* config/arm/arm.h: Likewise.
* config/bfin/bfin.h: Likewise.
* config/epiphany/epiphany.h: Likewise.
* config/frv/frv.h: Likewise.
* config/ia64/ia64.h: Likewise.
* config/iq2000/iq2000.h: Likewise.
* config/lm32/lm32.h: Likewise.
* config/m32r/m32r.h: Likewise.
* config/mcore/mcore.h: Likewise.
* config/mep/mep.h: Likewise.
* config/microblaze/microblaze.h: Likewise.
* config/mips/mips.h: Likewise.
* config/mmix/mmix.h: Likewise.
* config/mn10300/mn10300.h: Likewise.
* config/nds32/nds32.h: Likewise.
* config/nios2/nios2.h: Likewise.
* config/pa/pa.h: Likewise.
* config/rl78/rl78.h: Likewise.
* config/sh/sh.h: Likewise.
* config/sparc/sparc.h: Likewise.
* config/stormy16/stormy16.h: Likewise.
* config/tilegx/tilegx.h: Likewise.
* config/tilepro/tilepro.h: Likewise.
* config/v850/v850.h: Likewise.
* config/xtensa/xtensa.h: Likewise.
* doc/tm.texi: Regenerate.
* doc/tm.texi.in: Adjust.
* combine.c (simplify_set): Likewise.
(simplify_comparison): Likewise.
* expr.c (store_constructor): Likewise.
* internal-fn.c (expand_arith_overflow): Likewise.
* reload.c (push_reload): Likewise.
(find_reloads): Likewise.
(find_reloads_subreg_address): Likewise.
* reload1.c (eliminate_regs_1): Likewise.
* rtlanal.c (nonzero_bits1): Likewise.
(num_sign_bit_copies1): Likewise.
* simplify-rtx.c (simplify_truncation): Likewise.

From-SVN: r225597

38 files changed:
gcc/ChangeLog
gcc/combine.c
gcc/config/alpha/alpha.h
gcc/config/arc/arc.h
gcc/config/arm/arm.h
gcc/config/bfin/bfin.h
gcc/config/epiphany/epiphany.h
gcc/config/frv/frv.h
gcc/config/ia64/ia64.h
gcc/config/iq2000/iq2000.h
gcc/config/lm32/lm32.h
gcc/config/m32r/m32r.h
gcc/config/mcore/mcore.h
gcc/config/mep/mep.h
gcc/config/microblaze/microblaze.h
gcc/config/mips/mips.h
gcc/config/mmix/mmix.h
gcc/config/mn10300/mn10300.h
gcc/config/nds32/nds32.h
gcc/config/nios2/nios2.h
gcc/config/pa/pa.h
gcc/config/rl78/rl78.h
gcc/config/sh/sh.h
gcc/config/sparc/sparc.h
gcc/config/stormy16/stormy16.h
gcc/config/tilegx/tilegx.h
gcc/config/tilepro/tilepro.h
gcc/config/v850/v850.h
gcc/config/xtensa/xtensa.h
gcc/defaults.h
gcc/doc/tm.texi
gcc/doc/tm.texi.in
gcc/expr.c
gcc/internal-fn.c
gcc/reload.c
gcc/reload1.c
gcc/rtlanal.c
gcc/simplify-rtx.c

index 6ddd1ce78ceb7c7c95fc02a36e0a70ffaab9f928..c54e138220cda9b465cf1a2edec124834506577d 100644 (file)
@@ -1,3 +1,47 @@
+2015-07-08  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
+
+       * defaults.h: Provide default for WORD_REGISTER_OPERATIONS.
+       * config/alpha/alpha.h: Define WORD_REGISTER_OPERATIONS to 1.
+       * config/arc/arc.h: Likewise.
+       * config/arm/arm.h: Likewise.
+       * config/bfin/bfin.h: Likewise.
+       * config/epiphany/epiphany.h: Likewise.
+       * config/frv/frv.h: Likewise.
+       * config/ia64/ia64.h: Likewise.
+       * config/iq2000/iq2000.h: Likewise.
+       * config/lm32/lm32.h: Likewise.
+       * config/m32r/m32r.h: Likewise.
+       * config/mcore/mcore.h: Likewise.
+       * config/mep/mep.h: Likewise.
+       * config/microblaze/microblaze.h: Likewise.
+       * config/mips/mips.h: Likewise.
+       * config/mmix/mmix.h: Likewise.
+       * config/mn10300/mn10300.h: Likewise.
+       * config/nds32/nds32.h: Likewise.
+       * config/nios2/nios2.h: Likewise.
+       * config/pa/pa.h: Likewise.
+       * config/rl78/rl78.h: Likewise.
+       * config/sh/sh.h: Likewise.
+       * config/sparc/sparc.h: Likewise.
+       * config/stormy16/stormy16.h: Likewise.
+       * config/tilegx/tilegx.h: Likewise.
+       * config/tilepro/tilepro.h: Likewise.
+       * config/v850/v850.h: Likewise.
+       * config/xtensa/xtensa.h: Likewise.
+       * doc/tm.texi: Regenerate.
+       * doc/tm.texi.in: Adjust.
+       * combine.c (simplify_set): Likewise.
+       (simplify_comparison): Likewise.
+       * expr.c (store_constructor): Likewise.
+       * internal-fn.c (expand_arith_overflow): Likewise.
+       * reload.c (push_reload): Likewise.
+       (find_reloads): Likewise.
+       (find_reloads_subreg_address): Likewise.
+       * reload1.c (eliminate_regs_1): Likewise.
+       * rtlanal.c (nonzero_bits1): Likewise.
+       (num_sign_bit_copies1): Likewise.
+       * simplify-rtx.c (simplify_truncation): Likewise.
+
 2015-07-08  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
 
        * auto-inc-dec.c (pass_inc_dec::execute): Don't check the value
index d68515c289844b19081fe7d4f002eca9624c6807..e4e1d3ab6565195bc5481ddbaadaf4dc4599ddfc 100644 (file)
@@ -6716,10 +6716,9 @@ simplify_set (rtx x)
           / UNITS_PER_WORD)
          == ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (src)))
               + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD))
-#ifndef WORD_REGISTER_OPERATIONS
-      && (GET_MODE_SIZE (GET_MODE (src))
-       < GET_MODE_SIZE (GET_MODE (SUBREG_REG (src))))
-#endif
+      && (WORD_REGISTER_OPERATIONS
+         || (GET_MODE_SIZE (GET_MODE (src))
+             < GET_MODE_SIZE (GET_MODE (SUBREG_REG (src)))))
 #ifdef CANNOT_CHANGE_MODE_CLASS
       && ! (REG_P (dest) && REGNO (dest) < FIRST_PSEUDO_REGISTER
            && REG_CANNOT_CHANGE_MODE_P (REGNO (dest),
@@ -11424,7 +11423,7 @@ simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1)
   /* Try a few ways of applying the same transformation to both operands.  */
   while (1)
     {
-#ifndef WORD_REGISTER_OPERATIONS
+#if !WORD_REGISTER_OPERATIONS
       /* The test below this one won't handle SIGN_EXTENDs on these machines,
         so check specially.  */
       if (code != GTU && code != GEU && code != LTU && code != LEU
@@ -12078,11 +12077,9 @@ simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1)
                     However, if we commute the AND inside the SUBREG then
                     they no longer have defined values and the meaning of
                     the code has been changed.  */
-                 && (0
-#ifdef WORD_REGISTER_OPERATIONS
-                     || (mode_width > GET_MODE_PRECISION (tmode)
-                         && mode_width <= BITS_PER_WORD)
-#endif
+                 && ((WORD_REGISTER_OPERATIONS
+                      && mode_width > GET_MODE_PRECISION (tmode)
+                      && mode_width <= BITS_PER_WORD)
                      || (mode_width <= GET_MODE_PRECISION (tmode)
                          && subreg_lowpart_p (XEXP (op0, 0))))
                  && CONST_INT_P (XEXP (op0, 1))
index c39f1031b0a7e05a3fddfc8436b7ff554e7cc4a5..3fb58b11b0ddd95c00428f8899abcfb73e653b47 100644 (file)
@@ -888,7 +888,7 @@ do {                                                                             \
 
 /* Define if operations between registers always perform the operation
    on the full register even if a narrower mode is specified.  */
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 /* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
    will either zero-extend or sign-extend.  The value of this macro should
index 4fdd6543415a8ab59f16479030b725a8e596a8a9..d98cce112571d5554ac13a311305ac249cfdcc5b 100644 (file)
@@ -1540,7 +1540,7 @@ extern int arc_return_address_regs[4];
 
 /* Define if operations between registers always perform the operation
    on the full register even if a narrower mode is specified.  */
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 /* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
    will either zero-extend or sign-extend.  The value of this macro should
index 373dc85778d1bd4694c666ea4c6d82dc9ce8e819..836e5179d9b195ba416d506617115b94d8b595c8 100644 (file)
@@ -1904,7 +1904,7 @@ enum arm_auto_incmodes
 
 /* Define if operations between registers always perform the operation
    on the full register even if a narrower mode is specified.  */
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 /* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
    will either zero-extend or sign-extend.  The value of this macro should
index b0d017ebf5c8fac6c0ecff275974eb2793c1958b..26ba7c2e0155bcb0aae399ee7521a4fe7d243f12 100644 (file)
@@ -982,7 +982,7 @@ typedef struct {
 
 /* Define if operations between registers always perform the operation
    on the full register even if a narrower mode is specified. 
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 */
 
 /* Evaluates to true if A and B are mac flags that can be used
index 5515edbe9f066f3a07e32226ea180b6a4d5e1930..62a3d9d7ee6d1482cc54b5ad2b62554c4904a582 100644 (file)
@@ -845,7 +845,7 @@ do \
 
 /* Define if operations between registers always perform the operation
    on the full register even if a narrower mode is specified.  */
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 /* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
    will either zero-extend or sign-extend.  The value of this macro should
index a96f201b3572da18cd0a390f7026489ae1ccd246..b0d66fdf610c811b7b1035fa5319a467b3367f5d 100644 (file)
@@ -1882,7 +1882,7 @@ fprintf (STREAM, "\t.word .L%d\n", VALUE)
 /* Define this macro if operations between registers with integral mode smaller
    than a word are always performed on the entire register.  Most RISC machines
    have this property and most CISC machines do not.  */
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 /* Define this macro to be a C expression indicating when insns that read
    memory in MODE, an integral mode narrower than a word, set the bits outside
index 943faf9e0a966e9ab0b3494e3af85e685ad1f15e..4b624237a486e652c9711a2298260c1425b037c6 100644 (file)
@@ -1631,7 +1631,7 @@ do {                                                                      \
 /* Define this macro if operations between registers with integral mode smaller
    than a word are always performed on the entire register.  */
 
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 /* Define this macro to be a C expression indicating when insns that read
    memory in MODE, an integral mode narrower than a word, set the bits outside
index 14a68ce40a5f30f787b16a929fd41b32b4f1f219..73b1205db1cf07674daa97703cf4049facb568bc 100644 (file)
@@ -541,7 +541,7 @@ while (0)
 
 #define CASE_VECTOR_MODE SImode
 
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
 
index 9872860ec62f5695101ee8e1ffac36d2156c1266..986383f91b031397479eb733b28f4ef2830d59ff 100644 (file)
@@ -521,7 +521,7 @@ do {                                                            \
 
 #define CASE_VECTOR_MODE Pmode
 
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
 
index 2163de41349b3dfabd2cfd9925e6a2253d52aa43..fa061351f38a79010b32a6566889820fba6cc5ed 100644 (file)
@@ -1004,7 +1004,7 @@ L2:     .word STATIC
 
 /* Define if operations between registers always perform the operation
    on the full register even if a narrower mode is specified.  */
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 /* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
    will either zero-extend or sign-extend.  The value of this macro should
index 0aa96807b71422a897a0fbfeea2e83955fa23569..999d53603e168dc3628db8cf3e4a7890f1261b6c 100644 (file)
@@ -639,7 +639,7 @@ extern const enum reg_class regno_reg_class[FIRST_PSEUDO_REGISTER];
 
 /* Define if operations between registers always perform the operation
    on the full register even if a narrower mode is specified.  */
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 /* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
    will either zero-extend or sign-extend.  The value of this macro should
@@ -673,7 +673,7 @@ extern const enum reg_class regno_reg_class[FIRST_PSEUDO_REGISTER];
    and another.  All register moves are cheap.  */
 #define REGISTER_MOVE_COST(MODE, SRCCLASS, DSTCLASS) 2
 
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 /* Assembler output control.  */
 #define ASM_COMMENT_START "\t//"
index 8fee2735a6363bb8d3a5f0281ef75df1d238fbac..f7322cb7c56e0f7633e2b278726ea754907f4105 100644 (file)
@@ -762,7 +762,7 @@ typedef struct
 
 #define CASE_VECTOR_MODE SImode
 
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 #define LOAD_EXTEND_OP(MODE) SIGN_EXTEND
 
 #define SHORT_IMMEDIATES_SIGN_EXTEND 1
index c832fa0fe93323e3537f38bb32fdaab71bf038a8..482c4a25d204faf22c415a30f3f78fc8417ab79a 100644 (file)
@@ -235,7 +235,7 @@ extern enum pipeline_type microblaze_pipe;
        && TYPE_MODE (TREE_TYPE (TYPE)) == QImode)                      \
      && (ALIGN) < BITS_PER_WORD) ? BITS_PER_WORD : (ALIGN))
 
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 #define LOAD_EXTEND_OP(MODE)  ZERO_EXTEND
 
index 03bbae1ad5a1a4d77920781eae9b5e346e38a417..37c85f0f05537a40da6a8f196dba3ca64d31ff98 100644 (file)
@@ -1598,7 +1598,7 @@ FP_ASM_SPEC "\
 
 /* Define if operations between registers always perform the operation
    on the full register even if a narrower mode is specified.  */
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 /* When in 64-bit mode, move insns will sign extend SImode and CCmode
    moves.  All other references are zero extended.  */
index 61ae4d694eb623afc301703131ecd5fed74ada76..d15d90e54a37d24931cd3c4dd8ea7a29bf7f0aae 100644 (file)
@@ -793,7 +793,7 @@ typedef struct { int regs; int lib; } CUMULATIVE_ARGS;
 #define CASE_VECTOR_MODE DImode
 #define CASE_VECTOR_PC_RELATIVE 0
 
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 /* We have a choice, which makes this yet another parameter to tweak.  The
    gut feeling is currently that SIGN_EXTEND wins; "int" is more frequent
index e5fa70bd7a8508aac708fb80077351352c8159fd..dbedb18e40cfda66febbc7a44d340721e456c34f 100644 (file)
@@ -699,7 +699,7 @@ do {                                                                             \
 
 /* Define if operations between registers always perform the operation
    on the full register even if a narrower mode is specified.  */
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
 
index dcecea7220807b37987999bd0d7919ff742e6e7b..126b5861d80abc3c48c039eb6c9c6f1727efb240 100644 (file)
@@ -1001,7 +1001,7 @@ enum reg_class
 
 /* Define this macro if operations between registers with integral mode
    smaller than a word are always performed on the entire register.  */
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 /* A C expression indicating when insns that read memory in mem_mode,
    an integral mode narrower than a word, set the bits outside of mem_mode
index 45eb70b7cec16b4cf5724d9f2d0c04a047e4148c..5856d7dccf6a3e353dcc2ab9930f7f519b67ddf2 100644 (file)
@@ -497,6 +497,6 @@ do {                                                                    \
 
 #define LOAD_EXTEND_OP(MODE) (ZERO_EXTEND)
 
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 #endif /* GCC_NIOS2_H */
index 4259a07d1ebb905c4523d4443d25e58f31acc97f..d7daabf081ddc94efcf4b3fc8d03e580466f7bc3 100644 (file)
@@ -1011,7 +1011,7 @@ do {                                                                           \
 
 /* Define if operations between registers always perform the operation
    on the full register even if a narrower mode is specified.  */
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 /* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
    will either zero-extend or sign-extend.  The value of this macro should
index 066b0d1323cfca3af56ec87ef5c3b2b14be3ad1f..6c72fac938b35b8963ce913fa103683b8226f7d8 100644 (file)
 #define POINTERS_EXTEND_UNSIGNED       1
 #define FUNCTION_MODE                  HImode
 #define CASE_VECTOR_MODE               Pmode
-#define WORD_REGISTER_OPERATIONS       0
+#define WORD_REGISTER_OPERATIONS       1
 #define HAS_LONG_COND_BRANCH           0
 #define HAS_LONG_UNCOND_BRANCH         0
 
index c4947a681790f69f46053a7c62694ea6f308c01f..7aa489d6dc045a13a83994fab0d78cabf3204d6e 100644 (file)
@@ -1813,7 +1813,7 @@ struct sh_args {
 
 /* Define if operations between registers always perform the operation
    on the full register even if a narrower mode is specified.  */
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 /* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
    will either zero-extend or sign-extend.  The value of this macro should
index 72dd18bfdfc9c53c19c701fd8269f8f07db163ad..2cbe0d9b7fa2d7f5370bca44aae0f2a346f644ff 100644 (file)
@@ -1460,7 +1460,7 @@ do {                                                                         \
 
 /* Define if operations between registers always perform the operation
    on the full register even if a narrower mode is specified.  */
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 /* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
    will either zero-extend or sign-extend.  The value of this macro should
index 38a2a0676a6a80997d00bd45253938f4e6a1c2af..ef787fdd3fe6a57c194d4f616788264391cc9b3c 100644 (file)
@@ -487,7 +487,7 @@ enum reg_class
 
 #define CASE_VECTOR_MODE SImode
 
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
 
index 7c3995abecc988fec9357aa7576d46562f21d69e..ac134b9d64cce5275432be38e6c7fd827192a976 100644 (file)
@@ -367,7 +367,7 @@ enum reg_class
 #define CLEAR_RATIO(speed) ((speed) ? 15 : TILEGX_CALL_RATIO)
 #define SET_RATIO(speed) ((speed) ? 15 : TILEGX_CALL_RATIO)
 
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 #define LOAD_EXTEND_OP(MODE) ((MODE) == SImode ? SIGN_EXTEND : ZERO_EXTEND)
 
index 970135a1d965674e7bebab0aa316bfc38b2e58b5..a6d8c4eceb0bdcd4b2b034e4f25894ed6e370f12 100644 (file)
@@ -331,7 +331,7 @@ enum reg_class
 #define CLEAR_RATIO(speed) ((speed) ? 15 : TILEPRO_CALL_RATIO)
 #define SET_RATIO(speed) ((speed) ? 15 : TILEPRO_CALL_RATIO)
 
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
 
index e40fd87789a97acb2c932732dfb678d6978f50fa..45ff1d596d176cc41264830c5fc57a4de4f7b53c 100644 (file)
@@ -864,7 +864,7 @@ typedef enum
 #define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \
   ASM_OUTPUT_ALIGN ((FILE), (TARGET_BIG_SWITCH ? 2 : 1));
 
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 /* Byte and short loads sign extend the value to a word.  */
 #define LOAD_EXTEND_OP(MODE) SIGN_EXTEND
index fb8702c92c993704e218866853d80160fb1033b1..ebc8792f90a5648f3a84bb21602da9a32ec24ed8 100644 (file)
@@ -197,7 +197,7 @@ extern unsigned xtensa_current_frame_size;
 
 /* Operations between registers always perform the operation
    on the full register even if a narrower mode is specified.  */
-#define WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 1
 
 /* Xtensa loads are zero-extended by default.  */
 #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
index f0296a3e472882801c658d09623b0c5924965f56..9d38ba18ff417d3e76413b1102fb7cc5a2a7b2cd 100644 (file)
@@ -1269,6 +1269,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #define SHORT_IMMEDIATES_SIGN_EXTEND 0
 #endif
 
+#ifndef WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 0
+#endif
+
 #ifdef GCC_INSN_FLAGS_H
 /* Dependent default target macro definitions
 
index a67b6a1c4f351ad215ebb80389fc43dd761d2acd..b911b7d4e260210059ce3ea527aaa816faa37bdc 100644 (file)
@@ -10377,7 +10377,7 @@ five otherwise.  This is best for most machines.
 @end deftypefn
 
 @defmac WORD_REGISTER_OPERATIONS
-Define this macro if operations between registers with integral mode
+Define this macro to 1 if operations between registers with integral mode
 smaller than a word are always performed on the entire register.
 Most RISC machines have this property and most CISC machines do not.
 @end defmac
index 59aa589bec9414f4e9f5fa9c7d2588669129d3c7..47550cc986100918467f3ea8d23498b0d92e6939 100644 (file)
@@ -7501,7 +7501,7 @@ is in effect.
 @hook TARGET_CASE_VALUES_THRESHOLD
 
 @defmac WORD_REGISTER_OPERATIONS
-Define this macro if operations between registers with integral mode
+Define this macro to 1 if operations between registers with integral mode
 smaller than a word are always performed on the entire register.
 Most RISC machines have this property and most CISC machines do not.
 @end defmac
index 4b860ddf7717dbf760654817a124545bf99241bd..34930c506ed00dc0f32d7c719946026f56df93af 100644 (file)
@@ -5979,9 +5979,7 @@ static void
 store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size)
 {
   tree type = TREE_TYPE (exp);
-#ifdef WORD_REGISTER_OPERATIONS
   HOST_WIDE_INT exp_size = int_size_in_bytes (type);
-#endif
 
   switch (TREE_CODE (type))
     {
@@ -6094,13 +6092,13 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size)
                                         highest_pow2_factor (offset));
              }
 
-#ifdef WORD_REGISTER_OPERATIONS
            /* If this initializes a field that is smaller than a
               word, at the start of a word, try to widen it to a full
               word.  This special case allows us to output C++ member
               function initializations in a form that the optimizers
               can understand.  */
-           if (REG_P (target)
+           if (WORD_REGISTER_OPERATIONS
+               && REG_P (target)
                && bitsize < BITS_PER_WORD
                && bitpos % BITS_PER_WORD == 0
                && GET_MODE_CLASS (mode) == MODE_INT
@@ -6125,7 +6123,6 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size)
                bitsize = BITS_PER_WORD;
                mode = word_mode;
              }
-#endif
 
            if (MEM_P (to_rtx) && !MEM_KEEP_ALIAS_SET_P (to_rtx)
                && DECL_NONADDRESSABLE_P (field))
index 5b0a44d3d79501ac0e264a98956a741ede915a0e..82d59c92ecfb3bc8590000784db0705642b911e2 100644 (file)
@@ -1727,15 +1727,15 @@ expand_arith_overflow (enum tree_code code, gimple stmt)
          return;
        }
 
-#ifdef WORD_REGISTER_OPERATIONS
       /* For sub-word operations, if target doesn't have them, start
         with precres widening right away, otherwise do it only
         if the most simple cases can't be used.  */
-      if (orig_precres == precres && precres < BITS_PER_WORD)
+      if (WORD_REGISTER_OPERATIONS
+         && orig_precres == precres
+         && precres < BITS_PER_WORD)
        ;
-      else
-#endif
-      if ((uns0_p && uns1_p && unsr_p && prec0 <= precres && prec1 <= precres)
+      else if ((uns0_p && uns1_p && unsr_p && prec0 <= precres
+               && prec1 <= precres)
          || ((!uns0_p || !uns1_p) && !unsr_p
              && prec0 + uns0_p <= precres
              && prec1 + uns1_p <= precres))
@@ -1764,7 +1764,7 @@ expand_arith_overflow (enum tree_code code, gimple stmt)
       /* For sub-word operations, retry with a wider type first.  */
       if (orig_precres == precres && precop <= BITS_PER_WORD)
        {
-#ifdef WORD_REGISTER_OPERATIONS
+#if WORD_REGISTER_OPERATIONS
          int p = BITS_PER_WORD;
 #else
          int p = precop;
index a670f13b72bb4ff6089d5b1f20372366cd38b8e9..cc61d771efa0ec21a45d8b084bd087ec5481e5a1 100644 (file)
@@ -1086,7 +1086,7 @@ push_reload (rtx in, rtx out, rtx *inloc, rtx *outloc,
                      && INTEGRAL_MODE_P (GET_MODE (SUBREG_REG (in)))
                      && LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (in))) != UNKNOWN)
 #endif
-#ifdef WORD_REGISTER_OPERATIONS
+#if WORD_REGISTER_OPERATIONS
                  || ((GET_MODE_PRECISION (inmode)
                       < GET_MODE_PRECISION (GET_MODE (SUBREG_REG (in))))
                      && ((GET_MODE_SIZE (inmode) - 1) / UNITS_PER_WORD ==
@@ -1124,8 +1124,9 @@ push_reload (rtx in, rtx out, rtx *inloc, rtx *outloc,
 #endif
       inloc = &SUBREG_REG (in);
       in = *inloc;
-#if ! defined (LOAD_EXTEND_OP) && ! defined (WORD_REGISTER_OPERATIONS)
-      if (MEM_P (in))
+#if ! defined (LOAD_EXTEND_OP)
+      if (!WORD_REGISTER_OPERATIONS
+         && MEM_P (in))
        /* This is supposed to happen only for paradoxical subregs made by
           combine.c.  (SUBREG (MEM)) isn't supposed to occur other ways.  */
        gcc_assert (GET_MODE_SIZE (GET_MODE (in)) <= GET_MODE_SIZE (inmode));
@@ -1186,7 +1187,7 @@ push_reload (rtx in, rtx out, rtx *inloc, rtx *outloc,
               || MEM_P (SUBREG_REG (out)))
              && ((GET_MODE_PRECISION (outmode)
                   > GET_MODE_PRECISION (GET_MODE (SUBREG_REG (out))))
-#ifdef WORD_REGISTER_OPERATIONS
+#if WORD_REGISTER_OPERATIONS
                  || ((GET_MODE_PRECISION (outmode)
                       < GET_MODE_PRECISION (GET_MODE (SUBREG_REG (out))))
                      && ((GET_MODE_SIZE (outmode) - 1) / UNITS_PER_WORD ==
@@ -1220,11 +1221,9 @@ push_reload (rtx in, rtx out, rtx *inloc, rtx *outloc,
 #endif
       outloc = &SUBREG_REG (out);
       out = *outloc;
-#if ! defined (LOAD_EXTEND_OP) && ! defined (WORD_REGISTER_OPERATIONS)
-      gcc_assert (!MEM_P (out)
+      gcc_assert (WORD_REGISTER_OPERATIONS || !MEM_P (out)
                  || GET_MODE_SIZE (GET_MODE (out))
                     <= GET_MODE_SIZE (outmode));
-#endif
       outmode = GET_MODE (out);
     }
 
@@ -3152,7 +3151,7 @@ find_reloads (rtx_insn *insn, int replace, int ind_levels, int live_known,
                      || ((MEM_P (operand)
                           || (REG_P (operand)
                               && REGNO (operand) >= FIRST_PSEUDO_REGISTER))
-#ifndef WORD_REGISTER_OPERATIONS
+#if !WORD_REGISTER_OPERATIONS
                          && (((GET_MODE_BITSIZE (GET_MODE (operand))
                                < BIGGEST_ALIGNMENT)
                               && (GET_MODE_SIZE (operand_mode[i])
@@ -6160,12 +6159,11 @@ find_reloads_subreg_address (rtx x, int opnum, enum reload_type type,
   if (paradoxical_subreg_p (x))
     return NULL;
 
-#ifdef WORD_REGISTER_OPERATIONS
-  if (GET_MODE_SIZE (outer_mode) < GET_MODE_SIZE (inner_mode)
+  if (WORD_REGISTER_OPERATIONS
+      && GET_MODE_SIZE (outer_mode) < GET_MODE_SIZE (inner_mode)
       && ((GET_MODE_SIZE (outer_mode) - 1) / UNITS_PER_WORD
           == (GET_MODE_SIZE (inner_mode) - 1) / UNITS_PER_WORD))
     return NULL;
-#endif
 
   /* Since we don't attempt to handle paradoxical subregs, we can just
      call into simplify_subreg, which will handle all remaining checks
index 956f0eb2a1b966fb235a3255a9ceb4d16f6f339c..5192a99a3cec71316b844fc642b25d5033fd0f2b 100644 (file)
@@ -2862,7 +2862,7 @@ eliminate_regs_1 (rtx x, machine_mode mem_mode, rtx insn,
 
          if (MEM_P (new_rtx)
              && ((x_size < new_size
-#ifdef WORD_REGISTER_OPERATIONS
+#if WORD_REGISTER_OPERATIONS
                   /* On these machines, combine can create rtl of the form
                      (set (subreg:m1 (reg:m2 R) 0) ...)
                      where m1 < m2, and expects something interesting to
index e910ae7985fb2556fbb105f7a1907d893d05a570..cb20c2537dcbe41609b68ce51f1cab4689105f0a 100644 (file)
@@ -4253,7 +4253,6 @@ nonzero_bits1 (const_rtx x, machine_mode mode, const_rtx known_x,
        just return the mode mask.  Those tests will then be false.  */
     return nonzero;
 
-#ifndef WORD_REGISTER_OPERATIONS
   /* If MODE is wider than X, but both are a single word for both the host
      and target machines, we can compute this from which bits of the
      object might be nonzero in its own mode, taking into account the fact
@@ -4261,7 +4260,9 @@ nonzero_bits1 (const_rtx x, machine_mode mode, const_rtx known_x,
      causes the high-order bits to become undefined.  So they are
      not known to be zero.  */
 
-  if (GET_MODE (x) != VOIDmode && GET_MODE (x) != mode
+  if (!WORD_REGISTER_OPERATIONS
+      && GET_MODE (x) != VOIDmode
+      && GET_MODE (x) != mode
       && GET_MODE_PRECISION (GET_MODE (x)) <= BITS_PER_WORD
       && GET_MODE_PRECISION (GET_MODE (x)) <= HOST_BITS_PER_WIDE_INT
       && GET_MODE_PRECISION (mode) > GET_MODE_PRECISION (GET_MODE (x)))
@@ -4271,7 +4272,6 @@ nonzero_bits1 (const_rtx x, machine_mode mode, const_rtx known_x,
       nonzero |= GET_MODE_MASK (mode) & ~GET_MODE_MASK (GET_MODE (x));
       return nonzero;
     }
-#endif
 
   code = GET_CODE (x);
   switch (code)
@@ -4543,7 +4543,7 @@ nonzero_bits1 (const_rtx x, machine_mode mode, const_rtx known_x,
          nonzero &= cached_nonzero_bits (SUBREG_REG (x), mode,
                                          known_x, known_mode, known_ret);
 
-#if defined (WORD_REGISTER_OPERATIONS) && defined (LOAD_EXTEND_OP)
+#if WORD_REGISTER_OPERATIONS && defined (LOAD_EXTEND_OP)
          /* If this is a typical RISC machine, we only have to worry
             about the way loads are extended.  */
          if ((LOAD_EXTEND_OP (inner_mode) == SIGN_EXTEND
@@ -4763,12 +4763,12 @@ num_sign_bit_copies1 (const_rtx x, machine_mode mode, const_rtx known_x,
 
   if (GET_MODE (x) != VOIDmode && bitwidth > GET_MODE_PRECISION (GET_MODE (x)))
     {
-#ifndef WORD_REGISTER_OPERATIONS
       /* If this machine does not do all register operations on the entire
         register and MODE is wider than the mode of X, we can say nothing
         at all about the high-order bits.  */
-      return 1;
-#else
+      if (!WORD_REGISTER_OPERATIONS)
+       return 1;
+
       /* Likewise on machines that do, if the mode of the object is smaller
         than a word and loads of that size don't sign extend, we can say
         nothing about the high order bits.  */
@@ -4778,7 +4778,6 @@ num_sign_bit_copies1 (const_rtx x, machine_mode mode, const_rtx known_x,
 #endif
          )
        return 1;
-#endif
     }
 
   switch (code)
@@ -4857,7 +4856,6 @@ num_sign_bit_copies1 (const_rtx x, machine_mode mode, const_rtx known_x,
                                   - bitwidth)));
        }
 
-#ifdef WORD_REGISTER_OPERATIONS
 #ifdef LOAD_EXTEND_OP
       /* For paradoxical SUBREGs on machines where all register operations
         affect the entire register, just look inside.  Note that we are
@@ -4869,12 +4867,12 @@ num_sign_bit_copies1 (const_rtx x, machine_mode mode, const_rtx known_x,
         then we lose all sign bit copies that existed before the store
         to the stack.  */
 
-      if (paradoxical_subreg_p (x)
+      if (WORD_REGISTER_OPERATIONS
+         && paradoxical_subreg_p (x)
          && LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (x))) == SIGN_EXTEND
          && MEM_P (SUBREG_REG (x)))
        return cached_num_sign_bit_copies (SUBREG_REG (x), mode,
                                           known_x, known_mode, known_ret);
-#endif
 #endif
       break;
 
index 0901aafe25f722ecf2c9b4d1de34eac648403e0f..aeca187d83fc82ff3dbe235520f100c3a3719cb7 100644 (file)
@@ -673,9 +673,7 @@ simplify_truncation (machine_mode mode, rtx op,
      the truncation, i.e. simplify (truncate:QI (op:SI (x:SI) (y:SI))) into
      (op:QI (truncate:QI (x:SI)) (truncate:QI (y:SI))).  */
   if (1
-#ifdef WORD_REGISTER_OPERATIONS
-      && precision >= BITS_PER_WORD
-#endif
+      && (!WORD_REGISTER_OPERATIONS || precision >= BITS_PER_WORD)
       && (GET_CODE (op) == PLUS
          || GET_CODE (op) == MINUS
          || GET_CODE (op) == MULT))