1;; Constraint definitions for RS6000 2;; Copyright (C) 2006 Free Software Foundation, Inc. 3;; 4;; This file is part of GCC. 5;; 6;; GCC is free software; you can redistribute it and/or modify 7;; it under the terms of the GNU General Public License as published by 8;; the Free Software Foundation; either version 2, or (at your option) 9;; any later version. 10;; 11;; GCC is distributed in the hope that it will be useful, 12;; but WITHOUT ANY WARRANTY; without even the implied warranty of 13;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14;; GNU General Public License for more details. 15;; 16;; You should have received a copy of the GNU General Public License 17;; along with GCC; see the file COPYING. If not, write to 18;; the Free Software Foundation, 51 Franklin Street, Fifth Floor, 19;; Boston, MA 02110-1301, USA. 20 21;; Register constraints 22 23(define_register_constraint "f" "TARGET_HARD_FLOAT && TARGET_FPRS 24 ? FLOAT_REGS : NO_REGS" 25 "@internal") 26 27(define_register_constraint "b" "BASE_REGS" 28 "@internal") 29 30(define_register_constraint "h" "SPECIAL_REGS" 31 "@internal") 32 33(define_register_constraint "q" "MQ_REGS" 34 "@internal") 35 36(define_register_constraint "c" "CTR_REGS" 37 "@internal") 38 39(define_register_constraint "l" "LINK_REGS" 40 "@internal") 41 42(define_register_constraint "v" "ALTIVEC_REGS" 43 "@internal") 44 45(define_register_constraint "x" "CR0_REGS" 46 "@internal") 47 48(define_register_constraint "y" "CR_REGS" 49 "@internal") 50 51(define_register_constraint "z" "XER_REGS" 52 "@internal") 53 54;; Integer constraints 55 56(define_constraint "I" 57 "A signed 16-bit constant" 58 (and (match_code "const_int") 59 (match_test "(unsigned HOST_WIDE_INT) (ival + 0x8000) < 0x10000"))) 60 61(define_constraint "J" 62 "high-order 16 bits nonzero" 63 (and (match_code "const_int") 64 (match_test "(ival & (~ (unsigned HOST_WIDE_INT) 0xffff0000)) == 0"))) 65 66(define_constraint "K" 67 "low-order 16 bits nonzero" 68 (and (match_code "const_int") 69 (match_test "(ival & (~ (HOST_WIDE_INT) 0xffff)) == 0"))) 70 71(define_constraint "L" 72 "signed 16-bit constant shifted left 16 bits" 73 (and (match_code "const_int") 74 (match_test "((ival & 0xffff) == 0 75 && (ival >> 31 == -1 || ival >> 31 == 0))"))) 76 77(define_constraint "M" 78 "constant greater than 31" 79 (and (match_code "const_int") 80 (match_test "ival > 31"))) 81 82(define_constraint "N" 83 "positive constant that is an exact power of two" 84 (and (match_code "const_int") 85 (match_test "ival > 0 && exact_log2 (ival) >= 0"))) 86 87(define_constraint "O" 88 "constant zero" 89 (and (match_code "const_int") 90 (match_test "ival == 0"))) 91 92(define_constraint "P" 93 "constant whose negation is signed 16-bit constant" 94 (and (match_code "const_int") 95 (match_test "(unsigned HOST_WIDE_INT) ((- ival) + 0x8000) < 0x10000"))) 96 97;; Floating-point constraints 98 99(define_constraint "G" 100 "Constant that can be copied into GPR with two insns for DF/DI 101 and one for SF." 102 (and (match_code "const_double") 103 (match_test "num_insns_constant (op, mode) 104 == (mode == SFmode ? 1 : 2)"))) 105 106(define_constraint "H" 107 "DF/DI constant that takes three insns." 108 (and (match_code "const_double") 109 (match_test "num_insns_constant (op, mode) == 3"))) 110 111;; Memory constraints 112 113(define_memory_constraint "Q" 114 "Memory operand that is just an offset from a reg" 115 (and (match_code "mem") 116 (match_test "GET_CODE (XEXP (op, 0)) == REG"))) 117 118(define_memory_constraint "Y" 119 "Indexed or word-aligned displacement memory operand" 120 (match_operand 0 "word_offset_memref_operand")) 121 122(define_memory_constraint "Z" 123 "Indexed or indirect memory operand" 124 (match_operand 0 "indexed_or_indirect_operand")) 125 126;; Address constraints 127 128(define_address_constraint "a" 129 "Indexed or indirect address operand" 130 (match_operand 0 "indexed_or_indirect_address")) 131 132(define_constraint "R" 133 "AIX TOC entry" 134 (match_test "legitimate_constant_pool_address_p (op)")) 135 136;; General constraints 137 138(define_constraint "S" 139 "Constant that can be placed into a 64-bit mask operand" 140 (match_operand 0 "mask64_operand")) 141 142(define_constraint "T" 143 "Constant that can be placed into a 32-bit mask operand" 144 (match_operand 0 "mask_operand")) 145 146(define_constraint "U" 147 "V.4 small data reference" 148 (and (match_test "DEFAULT_ABI == ABI_V4") 149 (match_operand 0 "small_data_operand"))) 150 151(define_constraint "t" 152 "AND masks that can be performed by two rldic{l,r} insns 153 (but excluding those that could match other constraints of anddi3)" 154 (and (and (and (match_operand 0 "mask64_2_operand") 155 (match_test "(fixed_regs[CR0_REGNO] 156 || !logical_operand (op, DImode))")) 157 (not (match_operand 0 "mask_operand"))) 158 (not (match_operand 0 "mask64_operand")))) 159 160(define_constraint "W" 161 "vector constant that does not require memory" 162 (match_operand 0 "easy_vector_constant")) 163