1;; Constraint definitions for Renesas RX. 2;; Copyright (C) 2008-2018 Free Software Foundation, Inc. 3;; Contributed by Red Hat. 4;; 5;; This file is part of GCC. 6;; 7;; GCC is free software; you can redistribute it and/or modify 8;; it under the terms of the GNU General Public License as published by 9;; the Free Software Foundation; either version 3, or (at your option) 10;; any later version. 11;; 12;; GCC is distributed in the hope that it will be useful, 13;; but WITHOUT ANY WARRANTY; without even the implied warranty of 14;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15;; GNU General Public License for more details. 16;; 17;; You should have received a copy of the GNU General Public License 18;; along with GCC; see the file COPYING3. If not see 19;; <http://www.gnu.org/licenses/>. 20 21 22(define_constraint "Symbol" 23 "@internal Constraint on the type of rtx allowed in call insns" 24 (match_test "GET_CODE (op) == SYMBOL_REF") 25) 26 27 28(define_constraint "Int08" 29 "@internal A signed or unsigned 8-bit immediate value" 30 (and (match_code "const_int") 31 (match_test "IN_RANGE (ival, (HOST_WIDE_INT_M1U << 8), (1 << 8) - 1)") 32 ) 33) 34 35(define_constraint "Sint08" 36 "@internal A signed 8-bit immediate value" 37 (and (match_code "const_int") 38 (match_test "IN_RANGE (ival, (HOST_WIDE_INT_M1U << 7), (1 << 7) - 1)") 39 ) 40) 41 42(define_constraint "Sint16" 43 "@internal A signed 16-bit immediate value" 44 (and (match_code "const_int") 45 (match_test "IN_RANGE (ival, (HOST_WIDE_INT_M1U << 15), (1 << 15) - 1)") 46 ) 47) 48 49(define_constraint "Sint24" 50 "@internal A signed 24-bit immediate value" 51 (and (match_code "const_int") 52 (match_test "IN_RANGE (ival, (HOST_WIDE_INT_M1U << 23), (1 << 23) - 1)") 53 ) 54) 55 56;; This constraint is used by the SUBSI3 pattern because the 57;; RX SUB instruction can only take a 4-bit unsigned integer 58;; value. Also used by the MVTIPL instruction. 59(define_constraint "Uint04" 60 "@internal An unsigned 4-bit immediate value" 61 (and (match_code "const_int") 62 (match_test "IN_RANGE (ival, 0, 15)") 63 ) 64) 65 66(define_constraint "NEGint4" 67 "@internal An signed 4-bit negative immediate value" 68 (and (match_code "const_int") 69 (match_test "IN_RANGE (ival, -15, -1)") 70 ) 71) 72 73;; This is used in arithmetic and logic instructions for 74;; a source operand that lies in memory and which satisfies 75;; rx_restricted_memory_address(). 76 77(define_memory_constraint "Q" 78 "A MEM which only uses REG or REG+INT addressing." 79 (and (match_code "mem") 80 (ior (match_code "reg" "0") 81 (and (match_code "plus" "0") 82 (and (match_code "reg,subreg" "00") 83 (match_code "const_int" "01") 84 ) 85 ) 86 ) 87 ) 88) 89 90(define_constraint "Rpid" 91 "A MEM to a PID variable" 92 (and (match_code "mem") 93 (and (match_code "plus" "0") 94 (and (match_code "reg,subreg" "00") 95 (match_code "unspec" "01") 96 ) 97 ) 98 ) 99) 100 101(define_constraint "Rpda" 102 "An address to a PID variable" 103 (and (match_code "plus" "") 104 (and (match_code "reg,subreg" "0") 105 (match_code "unspec" "1") 106 ) 107 ) 108) 109 110(define_constraint "CALL_OP_SYMBOL_REF" 111"constraint for call instructions using symbol ref" 112(and (match_test "!TARGET_JSR") 113 (match_code "symbol_ref")) 114) 115