1;; Constraint definitions for GCN. 2;; Copyright (C) 2016-2021 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 3, 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 COPYING3. If not see 18;; <http://www.gnu.org/licenses/>. 19 20(define_constraint "I" 21 "Inline integer constant" 22 (and (match_code "const_int") 23 (match_test "ival >= -16 && ival <= 64"))) 24 25(define_constraint "J" 26 "Signed integer 16-bit inline constant" 27 (and (match_code "const_int") 28 (match_test "((unsigned HOST_WIDE_INT) ival + 0x8000) < 0x10000"))) 29 30(define_constraint "Kf" 31 "Immeditate constant -1" 32 (and (match_code "const_int") 33 (match_test "ival == -1"))) 34 35(define_constraint "L" 36 "Unsigned integer 15-bit constant" 37 (and (match_code "const_int") 38 (match_test "((unsigned HOST_WIDE_INT) ival) < 0x8000"))) 39 40(define_constraint "A" 41 "Inline immediate parameter" 42 (and (match_code "const_int,const_double,const_vector") 43 (match_test "gcn_inline_constant_p (op)"))) 44 45(define_constraint "B" 46 "Immediate 32-bit parameter" 47 (and (match_code "const_int,const_double,const_vector") 48 (match_test "gcn_constant_p (op)"))) 49 50(define_constraint "C" 51 "Immediate 32-bit parameter zero-extended to 64-bits" 52 (and (match_code "const_int,const_double,const_vector") 53 (match_test "gcn_constant64_p (op)"))) 54 55(define_constraint "DA" 56 "Immediate 64-bit parameter, low and high part match 'A'" 57 (and (match_code "const_int,const_double,const_vector") 58 (match_test "gcn_inline_constant64_p (op, 0)"))) 59 60(define_constraint "Db" 61 "Immediate 64-bit parameter, low part matches 'B', high part matches 'A'" 62 (and (match_code "const_int,const_double,const_vector") 63 (match_test "gcn_inline_constant64_p (op, 1)"))) 64 65(define_constraint "DB" 66 "Immediate 64-bit parameter, low and high part match 'B'" 67 (match_code "const_int,const_double,const_vector")) 68 69(define_constraint "U" 70 "unspecified value" 71 (match_code "unspec")) 72 73(define_constraint "Y" 74 "Symbol or label for relative calls" 75 (match_code "symbol_ref,label_ref")) 76 77(define_register_constraint "v" "VGPR_REGS" 78 "VGPR registers") 79 80(define_register_constraint "Sg" "SGPR_REGS" 81 "SGPR registers") 82 83(define_register_constraint "SD" "SGPR_DST_REGS" 84 "registers useable as a destination of scalar operation") 85 86(define_register_constraint "SS" "SGPR_SRC_REGS" 87 "registers useable as a source of scalar operation") 88 89(define_register_constraint "Sm" "SGPR_MEM_SRC_REGS" 90 "registers useable as a source of scalar memory operation") 91 92(define_register_constraint "Sv" "SGPR_VOP_SRC_REGS" 93 "registers useable as a source of VOP3A instruction") 94 95(define_register_constraint "ca" "ALL_CONDITIONAL_REGS" 96 "SCC VCCZ or EXECZ") 97 98(define_register_constraint "cs" "SCC_CONDITIONAL_REG" 99 "SCC") 100 101(define_register_constraint "cV" "VCC_CONDITIONAL_REG" 102 "VCC") 103 104(define_register_constraint "e" "EXEC_MASK_REG" 105 "EXEC") 106 107(define_special_memory_constraint "RB" 108 "Buffer memory address to scratch memory." 109 (and (match_code "mem") 110 (match_test "AS_SCRATCH_P (MEM_ADDR_SPACE (op))"))) 111 112(define_special_memory_constraint "RF" 113 "Buffer memory address to flat memory." 114 (and (match_code "mem") 115 (match_test "AS_FLAT_P (MEM_ADDR_SPACE (op)) 116 && gcn_flat_address_p (XEXP (op, 0), mode)"))) 117 118(define_special_memory_constraint "RS" 119 "Buffer memory address to scalar flat memory." 120 (and (match_code "mem") 121 (match_test "AS_SCALAR_FLAT_P (MEM_ADDR_SPACE (op)) 122 && gcn_scalar_flat_mem_p (op)"))) 123 124(define_special_memory_constraint "RL" 125 "Buffer memory address to LDS memory." 126 (and (match_code "mem") 127 (match_test "AS_LDS_P (MEM_ADDR_SPACE (op))"))) 128 129(define_special_memory_constraint "RG" 130 "Buffer memory address to GDS memory." 131 (and (match_code "mem") 132 (match_test "AS_GDS_P (MEM_ADDR_SPACE (op))"))) 133 134(define_special_memory_constraint "RD" 135 "Buffer memory address to GDS or LDS memory." 136 (and (match_code "mem") 137 (ior (match_test "AS_GDS_P (MEM_ADDR_SPACE (op))") 138 (match_test "AS_LDS_P (MEM_ADDR_SPACE (op))")))) 139 140(define_special_memory_constraint "RM" 141 "Memory address to global (main) memory." 142 (and (match_code "mem") 143 (match_test "AS_GLOBAL_P (MEM_ADDR_SPACE (op)) 144 && gcn_global_address_p (XEXP (op, 0))"))) 145