From 3ed99cc9201090163e6dd0e938c22dac226754a0 Mon Sep 17 00:00:00 2001 From: Adrian Straetling Date: Mon, 9 May 2005 18:12:25 +0000 Subject: [PATCH] s390-protos.h: (s390_match_ccmode... 2005-05-09 Adrian Straetling * config/s390/s390-protos.h: (s390_match_ccmode, s390_match_ccmode_set, reg_used_in_mem_p, symbolic_reference_mentioned_p, tls_symbolic_reference_mentioned_p, legitimate_la_operand_p, preferred_la_operand_p, s390_short_displacement, addr_generation_dependency_p, legitimate_reload_constant_p, legitimate_address_p): Change return type into 'bool'. (s390_tm_ccmode): Change type of parameter "mixed" into 'bool'. * config/s390/s390.c: (s390_match_ccmode, symbolic_reference_mentioned_p, tls_symbolic_reference_mentioned_p, legitimate_reload_constant_p): Change return type into 'bool'. (preferred_la_operand_p,legitimate_la_operand_p, legitimate_address_p): Likewise. Additionally adapted comment. (s390_extra_constraint_p): Change Comment to reflect 'int' return type. (s390_tm_ccmode): Change type of parameter "mixed" into 'bool'. (s390_decompose_address): Change the type of the internal flags "pointer", "base_ptr", "indx_ptr", and the return value into 'bool'. (struct s390_address): Change type of "pointer" into bool. * config/s390/s390.md: ("*tmdi_reg", "*tmsi_reg", "tm_full"): Adapt calls for 's390_tm_ccmode' to the new signature. From-SVN: r99463 --- gcc/ChangeLog | 23 ++++++ gcc/config/s390/s390-protos.h | 16 ++-- gcc/config/s390/s390.c | 149 +++++++++++++++++----------------- gcc/config/s390/s390.md | 8 +- 4 files changed, 108 insertions(+), 88 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5ed9ea9cce3..2c303acddd8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,26 @@ +2005-05-09 Adrian Straetling + + * config/s390/s390-protos.h: (s390_match_ccmode, + s390_match_ccmode_set, reg_used_in_mem_p, + symbolic_reference_mentioned_p, tls_symbolic_reference_mentioned_p, + legitimate_la_operand_p, preferred_la_operand_p, + s390_short_displacement, addr_generation_dependency_p, + legitimate_reload_constant_p, legitimate_address_p): Change return type + into 'bool'. + (s390_tm_ccmode): Change type of parameter "mixed" into 'bool'. + * config/s390/s390.c: (s390_match_ccmode, + symbolic_reference_mentioned_p, tls_symbolic_reference_mentioned_p, + legitimate_reload_constant_p): Change return type into 'bool'. + (preferred_la_operand_p,legitimate_la_operand_p, legitimate_address_p): + Likewise. Additionally adapted comment. + (s390_extra_constraint_p): Change Comment to reflect 'int' return type. + (s390_tm_ccmode): Change type of parameter "mixed" into 'bool'. + (s390_decompose_address): Change the type of the internal flags + "pointer", "base_ptr", "indx_ptr", and the return value into 'bool'. + (struct s390_address): Change type of "pointer" into bool. + * config/s390/s390.md: ("*tmdi_reg", "*tmsi_reg", "tm_full"): + Adapt calls for 's390_tm_ccmode' to the new signature. + 2005-05-09 Adrian Straetling * config/s390/s390.c: (s390_match_ccmode_set, diff --git a/gcc/config/s390/s390-protos.h b/gcc/config/s390/s390-protos.h index 3b7b9d187f4..e1aa8275e0d 100644 --- a/gcc/config/s390/s390-protos.h +++ b/gcc/config/s390/s390-protos.h @@ -39,20 +39,20 @@ extern bool s390_split_ok_p (rtx, rtx, enum machine_mode, int); extern bool s390_offset_p (rtx, rtx, rtx); extern int tls_symbolic_operand (rtx); -extern int s390_match_ccmode (rtx, enum machine_mode); -extern enum machine_mode s390_tm_ccmode (rtx, rtx, int); +extern bool s390_match_ccmode (rtx, enum machine_mode); +extern enum machine_mode s390_tm_ccmode (rtx, rtx, bool); extern enum machine_mode s390_select_ccmode (enum rtx_code, rtx, rtx); extern void s390_canonicalize_comparison (enum rtx_code *, rtx *, rtx *); extern rtx s390_emit_compare (enum rtx_code, rtx, rtx); extern void s390_emit_jump (rtx, rtx); -extern int symbolic_reference_mentioned_p (rtx); -extern int tls_symbolic_reference_mentioned_p (rtx); -extern int legitimate_la_operand_p (rtx); -extern int preferred_la_operand_p (rtx, rtx); +extern bool symbolic_reference_mentioned_p (rtx); +extern bool tls_symbolic_reference_mentioned_p (rtx); +extern bool legitimate_la_operand_p (rtx); +extern bool preferred_la_operand_p (rtx, rtx); extern int legitimate_pic_operand_p (rtx); extern int legitimate_constant_p (rtx); -extern int legitimate_reload_constant_p (rtx); -extern int legitimate_address_p (enum machine_mode, rtx, int); +extern bool legitimate_reload_constant_p (rtx); +extern bool legitimate_address_p (enum machine_mode, rtx, int); extern rtx legitimize_pic_address (rtx, rtx); extern rtx legitimize_address (rtx, rtx, enum machine_mode); extern rtx legitimize_reload_address (rtx, enum machine_mode, int, int); diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 35cd86dc569..4b3e86b7d4d 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -177,7 +177,7 @@ struct s390_address rtx base; rtx indx; rtx disp; - int pointer; + bool pointer; }; /* Which cpu are we tuning for. */ @@ -259,7 +259,7 @@ struct machine_function GTY(()) the source and destination have matching CC modes and that CC mode is at least as constrained as REQ_MODE. */ -static int +static bool s390_match_ccmode_set (rtx set, enum machine_mode req_mode) { enum machine_mode set_mode; @@ -312,14 +312,14 @@ s390_match_ccmode_set (rtx set, enum machine_mode req_mode) CC mode is at least as constrained as REQ_MODE. If REQ_MODE is VOIDmode, always return false. */ -int +bool s390_match_ccmode (rtx insn, enum machine_mode req_mode) { int i; /* s390_tm_ccmode returns VOIDmode to indicate failure. */ if (req_mode == VOIDmode) - return 0; + return false; if (GET_CODE (PATTERN (insn)) == SET) return s390_match_ccmode_set (PATTERN (insn), req_mode); @@ -330,10 +330,10 @@ s390_match_ccmode (rtx insn, enum machine_mode req_mode) rtx set = XVECEXP (PATTERN (insn), 0, i); if (GET_CODE (set) == SET) if (!s390_match_ccmode_set (set, req_mode)) - return 0; + return false; } - return 1; + return true; } /* If a test-under-mask instruction can be used to implement @@ -344,7 +344,7 @@ s390_match_ccmode (rtx insn, enum machine_mode req_mode) if the instruction cannot (TM). */ enum machine_mode -s390_tm_ccmode (rtx op1, rtx op2, int mixed) +s390_tm_ccmode (rtx op1, rtx op2, bool mixed) { int bit0, bit1; @@ -1243,12 +1243,12 @@ s390_safe_attr_type (rtx insn) /* Return true if DISP is a valid short displacement. */ -static int +static bool s390_short_displacement (rtx disp) { /* No displacement is OK. */ if (!disp) - return 1; + return true; /* Integer displacement in range. */ if (GET_CODE (disp) == CONST_INT) @@ -1259,20 +1259,20 @@ s390_short_displacement (rtx disp) && GET_CODE (XEXP (disp, 0)) == UNSPEC && (XINT (XEXP (disp, 0), 1) == UNSPEC_GOT || XINT (XEXP (disp, 0), 1) == UNSPEC_GOTNTPOFF)) - return 0; + return false; /* All other symbolic constants are literal pool references, which are OK as the literal pool must be small. */ if (GET_CODE (disp) == CONST) - return 1; + return true; - return 0; + return false; } /* Decompose a RTL expression ADDR for a memory address into its components, returned in OUT. - Returns 0 if ADDR is not a valid memory address, nonzero + Returns false if ADDR is not a valid memory address, true otherwise. If OUT is NULL, don't return the components, but check for validity only. @@ -1288,9 +1288,9 @@ s390_decompose_address (register rtx addr, struct s390_address *out) rtx indx = NULL_RTX; rtx disp = NULL_RTX; rtx orig_disp; - int pointer = FALSE; - int base_ptr = FALSE; - int indx_ptr = FALSE; + bool pointer = false; + bool base_ptr = false; + bool indx_ptr = false; /* Decompose address into base + index + displacement. */ @@ -1328,7 +1328,7 @@ s390_decompose_address (register rtx addr, struct s390_address *out) else { - return FALSE; + return false; } } @@ -1367,7 +1367,7 @@ s390_decompose_address (register rtx addr, struct s390_address *out) else if (!indx) indx = gen_rtx_REG (Pmode, BASE_REGNUM); else - return FALSE; + return false; /* Mark up the displacement. */ disp = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, disp), @@ -1386,7 +1386,7 @@ s390_decompose_address (register rtx addr, struct s390_address *out) gen_rtvec (1, XVECEXP (base, 0, 0)), UNSPEC_LTREL_OFFSET); else - return FALSE; + return false; base = gen_rtx_REG (Pmode, BASE_REGNUM); break; @@ -1396,11 +1396,11 @@ s390_decompose_address (register rtx addr, struct s390_address *out) break; default: - return FALSE; + return false; } if (GET_CODE (base) != REG || GET_MODE (base) != Pmode) - return FALSE; + return false; if (REGNO (base) == BASE_REGNUM || REGNO (base) == STACK_POINTER_REGNUM @@ -1411,7 +1411,7 @@ s390_decompose_address (register rtx addr, struct s390_address *out) || REGNO (base) == ARG_POINTER_REGNUM || (flag_pic && REGNO (base) == PIC_OFFSET_TABLE_REGNUM)) - pointer = base_ptr = TRUE; + pointer = base_ptr = true; } /* Validate index register. */ @@ -1426,7 +1426,7 @@ s390_decompose_address (register rtx addr, struct s390_address *out) gen_rtvec (1, XVECEXP (indx, 0, 0)), UNSPEC_LTREL_OFFSET); else - return FALSE; + return false; indx = gen_rtx_REG (Pmode, BASE_REGNUM); break; @@ -1436,11 +1436,11 @@ s390_decompose_address (register rtx addr, struct s390_address *out) break; default: - return FALSE; + return false; } if (GET_CODE (indx) != REG || GET_MODE (indx) != Pmode) - return FALSE; + return false; if (REGNO (indx) == BASE_REGNUM || REGNO (indx) == STACK_POINTER_REGNUM @@ -1451,7 +1451,7 @@ s390_decompose_address (register rtx addr, struct s390_address *out) || REGNO (indx) == ARG_POINTER_REGNUM || (flag_pic && REGNO (indx) == PIC_OFFSET_TABLE_REGNUM)) - pointer = indx_ptr = TRUE; + pointer = indx_ptr = true; } /* Prefer to use pointer as base, not index. */ @@ -1480,12 +1480,12 @@ s390_decompose_address (register rtx addr, struct s390_address *out) && base != return_address_pointer_rtx && indx != return_address_pointer_rtx) if (!DISP_IN_RANGE (offset)) - return FALSE; + return false; } else { /* All the special cases are pointers. */ - pointer = TRUE; + pointer = true; /* In the small-PIC case, the linker converts @GOT and @GOTNTPOFF offsets to possible displacements. */ @@ -1517,18 +1517,18 @@ s390_decompose_address (register rtx addr, struct s390_address *out) exceed the size of the constant pool entry. */ rtx sym = XVECEXP (disp, 0, 0); if (offset >= GET_MODE_SIZE (get_pool_mode (sym))) - return FALSE; + return false; orig_disp = plus_constant (orig_disp, offset); } } else - return FALSE; + return false; } if (!base && !indx) - pointer = TRUE; + pointer = true; if (out) { @@ -1538,7 +1538,7 @@ s390_decompose_address (register rtx addr, struct s390_address *out) out->pointer = pointer; } - return TRUE; + return true; } /* Return true if CODE is a valid address without index. */ @@ -1556,7 +1556,7 @@ s390_legitimate_address_without_index_p (rtx op) return true; } -/* Return true if OP is a valid operand for a C constraint. */ +/* Return 1 if OP is a valid operand for a C constraint, 0 else. */ int s390_extra_constraint_str (rtx op, int c, const char * str) @@ -1996,7 +1996,7 @@ s390_split_access_reg (rtx reg, rtx *lo, rtx *hi) /* Return true if OP contains a symbol reference */ -int +bool symbolic_reference_mentioned_p (rtx op) { register const char *fmt; @@ -2026,7 +2026,7 @@ symbolic_reference_mentioned_p (rtx op) /* Return true if OP contains a reference to a thread-local symbol. */ -int +bool tls_symbolic_reference_mentioned_p (rtx op) { register const char *fmt; @@ -2044,14 +2044,14 @@ tls_symbolic_reference_mentioned_p (rtx op) for (j = XVECLEN (op, i) - 1; j >= 0; j--) if (tls_symbolic_reference_mentioned_p (XVECEXP (op, i, j))) - return 1; + return true; } else if (fmt[i] == 'e' && tls_symbolic_reference_mentioned_p (XEXP (op, i))) - return 1; + return true; } - return 0; + return false; } @@ -2172,31 +2172,31 @@ s390_cannot_force_const_mem (rtx x) a constant that would need to be forced to the literal pool before it can be used as operand. */ -int +bool legitimate_reload_constant_p (register rtx op) { /* Accept la(y) operands. */ if (GET_CODE (op) == CONST_INT && DISP_IN_RANGE (INTVAL (op))) - return 1; + return true; /* Accept l(g)hi operands. */ if (GET_CODE (op) == CONST_INT && CONST_OK_FOR_CONSTRAINT_P (INTVAL (op), 'K', "K")) - return 1; + return true; /* Accept lliXX operands. */ if (TARGET_ZARCH && s390_single_part (op, DImode, HImode, 0) >= 0) - return 1; + return true; /* Accept larl operands. */ if (TARGET_CPU_ZARCH && larl_operand (op, VOIDmode)) - return 1; + return true; /* Everything else cannot be handled without reload. */ - return 0; + return false; } /* Given an rtx OP being reloaded into a reg required to be in class CLASS, @@ -2343,56 +2343,53 @@ s390_expand_plus_operand (register rtx target, register rtx src, } -/* Return nonzero if ADDR is a valid memory address. +/* Return true if ADDR is a valid memory address. STRICT specifies whether strict register checking applies. */ -int +bool legitimate_address_p (enum machine_mode mode ATTRIBUTE_UNUSED, register rtx addr, int strict) { struct s390_address ad; if (!s390_decompose_address (addr, &ad)) - return FALSE; + return false; if (strict) { if (ad.base && !REG_OK_FOR_BASE_STRICT_P (ad.base)) - return FALSE; + return false; if (ad.indx && !REG_OK_FOR_INDEX_STRICT_P (ad.indx)) - return FALSE; + return false; } else { if (ad.base && !REG_OK_FOR_BASE_NONSTRICT_P (ad.base)) - return FALSE; + return false; if (ad.indx && !REG_OK_FOR_INDEX_NONSTRICT_P (ad.indx)) - return FALSE; + return false; } - return TRUE; + return true; } -/* Return 1 if OP is a valid operand for the LA instruction. +/* Return true if OP is a valid operand for the LA instruction. In 31-bit, we need to prove that the result is used as an address, as LA performs only a 31-bit addition. */ -int +bool legitimate_la_operand_p (register rtx op) { struct s390_address addr; if (!s390_decompose_address (op, &addr)) - return FALSE; - - if (TARGET_64BIT || addr.pointer) - return TRUE; + return false; - return FALSE; + return (TARGET_64BIT || addr.pointer); } -/* Return 1 if it is valid *and* preferable to use LA to +/* Return true if it is valid *and* preferable to use LA to compute the sum of OP1 and OP2. */ -int +bool preferred_la_operand_p (rtx op1, rtx op2) { struct s390_address addr; @@ -2401,23 +2398,23 @@ preferred_la_operand_p (rtx op1, rtx op2) op1 = gen_rtx_PLUS (Pmode, op1, op2); if (!s390_decompose_address (op1, &addr)) - return FALSE; + return false; if (addr.base && !REG_OK_FOR_BASE_STRICT_P (addr.base)) - return FALSE; + return false; if (addr.indx && !REG_OK_FOR_INDEX_STRICT_P (addr.indx)) - return FALSE; + return false; if (!TARGET_64BIT && !addr.pointer) - return FALSE; + return false; if (addr.pointer) - return TRUE; + return true; if ((addr.base && REG_P (addr.base) && REG_POINTER (addr.base)) || (addr.indx && REG_P (addr.indx) && REG_POINTER (addr.indx))) - return TRUE; + return true; - return FALSE; + return false; } /* Emit a forced load-address operation to load SRC into DST. @@ -3950,7 +3947,7 @@ s390_assemble_integer (rtx x, unsigned int size, int aligned_p) /* Returns true if register REGNO is used for forming a memory address in expression X. */ -static int +static bool reg_used_in_mem_p (int regno, rtx x) { enum rtx_code code = GET_CODE (x); @@ -3961,14 +3958,14 @@ reg_used_in_mem_p (int regno, rtx x) { if (refers_to_regno_p (regno, regno+1, XEXP (x, 0), 0)) - return 1; + return true; } else if (code == SET && GET_CODE (SET_DEST (x)) == PC) { if (refers_to_regno_p (regno, regno+1, SET_SRC (x), 0)) - return 1; + return true; } fmt = GET_RTX_FORMAT (code); @@ -3976,20 +3973,20 @@ reg_used_in_mem_p (int regno, rtx x) { if (fmt[i] == 'e' && reg_used_in_mem_p (regno, XEXP (x, i))) - return 1; + return true; else if (fmt[i] == 'E') for (j = 0; j < XVECLEN (x, i); j++) if (reg_used_in_mem_p (regno, XVECEXP (x, i, j))) - return 1; + return true; } - return 0; + return false; } /* Returns true if expression DEP_RTX sets an address register used by instruction INSN to address memory. */ -static int +static bool addr_generation_dependency_p (rtx dep_rtx, rtx insn) { rtx target, pat; @@ -4027,7 +4024,7 @@ addr_generation_dependency_p (rtx dep_rtx, rtx insn) return reg_used_in_mem_p (regno, PATTERN (insn)); } } - return 0; + return false; } /* Return 1, if dep_insn sets register used in insn in the agen unit. */ diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index 3feb8c2dfee..9a666a8ec7c 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -364,7 +364,7 @@ (compare (and:QI (match_operand:QI 0 "memory_operand" "Q,S") (match_operand:QI 1 "immediate_operand" "n,n")) (match_operand:QI 2 "immediate_operand" "n,n")))] - "s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], 0))" + "s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], false))" "@ tm\t%S0,%b1 tmy\t%S0,%b1" @@ -377,7 +377,7 @@ "N0HD0,N1HD0,N2HD0,N3HD0")) (match_operand:DI 2 "immediate_operand" "n,n,n,n")))] "TARGET_64BIT - && s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], 1)) + && s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], true)) && s390_single_part (operands[1], DImode, HImode, 0) >= 0" "@ tmhh\t%0,%i1 @@ -391,7 +391,7 @@ (compare (and:SI (match_operand:SI 0 "nonimmediate_operand" "d,d") (match_operand:SI 1 "immediate_operand" "N0HS0,N1HS0")) (match_operand:SI 2 "immediate_operand" "n,n")))] - "s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], 1)) + "s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], true)) && s390_single_part (operands[1], SImode, HImode, 0) >= 0" "@ tmh\t%0,%i1 @@ -402,7 +402,7 @@ [(set (reg CC_REGNUM) (compare (match_operand:HQI 0 "register_operand" "d") (match_operand:HQI 1 "immediate_operand" "n")))] - "s390_match_ccmode (insn, s390_tm_ccmode (constm1_rtx, operands[1], 1))" + "s390_match_ccmode (insn, s390_tm_ccmode (constm1_rtx, operands[1], true))" "tml\t%0," [(set_attr "op_type" "RI")]) -- 2.30.2