;; Constraint definitions for Blackfin ;; Copyright (C) 2008-2022 Free Software Foundation, Inc. ;; Contributed by Analog Devices
;; This file is part of GCC.
;; GCC is free software; you can redistribute it and/or modify it ;; under the terms of the GNU General Public License as published ;; by the Free Software Foundation; either version 3, or (at your ;; option) any later version.
;; GCC is distributed in the hope that it will be useful, but WITHOUT ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ;; License for more details.
;; You should have received a copy of the GNU General Public License ;; along with GCC; see the file COPYING3. If not see ;; http://www.gnu.org/licenses/.
(define_register_constraint “a” “PREGS” “A Pn register.”)
(define_register_constraint “d” “DREGS” “A Rn register.”)
(define_register_constraint “z” “PREGS_CLOBBERED” “A call clobbered Pn register.”)
(define_register_constraint “D” “EVEN_DREGS” “An even-numbered Rn register.”)
(define_register_constraint “W” “ODD_DREGS” “An odd-numbered Rn register.”)
(define_register_constraint “e” “AREGS” “An accumulator register.”)
(define_register_constraint “A” “EVEN_AREGS” “An even-numbered accumulator; A0.”)
(define_register_constraint “B” “ODD_AREGS” “An odd-numbered accumulator; A1.”)
(define_register_constraint “b” “IREGS” “An I register.”)
(define_register_constraint “v” “BREGS” “A B register.”)
(define_register_constraint “f” “MREGS” “An M register.”)
(define_register_constraint “c” “CIRCREGS” “A register used for circular buffering, i.e. I, B, or L registers.”)
(define_register_constraint “C” “CCREGS” “The CC register.”)
(define_register_constraint “t” “LT_REGS” “LT0 or LT1.”)
(define_register_constraint “u” “LB_REGS” “LB0 or LB1.”)
(define_register_constraint “k” “LC_REGS” “LC0 or LC1.”)
(define_register_constraint “x” “MOST_REGS” “Any R, P, B, M, I or L register.”)
(define_register_constraint “y” “PROLOGUE_REGS” “Additional registers typically used only in prologues and epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and USP.”)
(define_register_constraint “w” “NON_A_CC_REGS” “Any register except accumulators or CC.”)
(define_register_constraint “Z” “FDPIC_REGS” “@internal The FD-PIC GOT pointer; P3.”)
(define_register_constraint “Y” “FDPIC_FPTR_REGS” “@internal The FD-PIC function pointer register; P1.”)
(define_register_constraint “q0” “D0REGS” “The register R0.”)
(define_register_constraint “q1” “D1REGS” “The register R1.”)
(define_register_constraint “q2” “D2REGS” “The register R2.”)
(define_register_constraint “q3” “D3REGS” “The register R3.”)
(define_register_constraint “q4” “D4REGS” “The register R4.”)
(define_register_constraint “q5” “D5REGS” “The register R5.”)
(define_register_constraint “q6” “D6REGS” “The register R6.”)
(define_register_constraint “q7” “D7REGS” “The register R7.”)
(define_register_constraint “qA” “P0REGS” “The register P0.”)
;; Constant constraints.
(define_constraint “J” “A constant value of the form 2**N, where N 5-bit wide.” (and (match_code “const_int”) (match_test “log2constp (ival)”)))
(define_constraint “Ks3” “A signed 3 bit immediate.” (and (match_code “const_int”) (match_test “ival >= -4 && ival <= 3”)))
(define_constraint “Ku3” “An unsigned 3 bit immediate.” (and (match_code “const_int”) (match_test “ival >= 0 && ival <= 7”)))
(define_constraint “Ks4” “A signed 4 bit immediate.” (and (match_code “const_int”) (match_test “ival >= -8 && ival <= 7”)))
(define_constraint “Ku4” “An unsigned 4 bit immediate.” (and (match_code “const_int”) (match_test “ival >= 0 && ival <= 15”)))
(define_constraint “Ks5” “A signed 5 bit immediate.” (and (match_code “const_int”) (match_test “ival >= -16 && ival <= 15”)))
(define_constraint “Ku5” “An unsigned 5 bit immediate.” (and (match_code “const_int”) (match_test “ival >= 0 && ival <= 31”)))
(define_constraint “Ks7” “A signed 7 bit immediate.” (and (match_code “const_int”) (match_test “ival >= -64 && ival <= 63”)))
(define_constraint “KN7” “A constant that when negated is a signed 7 bit immediate.” (and (match_code “const_int”) (match_test “ival >= -63 && ival <= 64”)))
(define_constraint “Ksh” “A signed 16 bit immediate.” (and (match_code “const_int”) (match_test “ival >= -32768 && ival <= 32767”)))
(define_constraint “Kuh” “An unsigned 16 bit immediate.” (and (match_code “const_int”) (match_test “ival >= 0 && ival <= 65535”)))
(define_constraint “L” “A constant value of the form ~(2**N).” (and (match_code “const_int”) (match_test “log2constp (~ival)”)))
(define_constraint “M1” “An integer with the value 255.” (and (match_code “const_int”) (match_test “ival == 255”)))
(define_constraint “M2” “An integer with the value 65535.” (and (match_code “const_int”) (match_test “ival == 65535”)))
(define_constraint “P0” “An integer with the value 0.” (and (match_code “const_int”) (match_test “ival == 0”)))
(define_constraint “P1” “An integer with the value 1.” (and (match_code “const_int”) (match_test “ival == 1”)))
(define_constraint “P2” “An integer with the value 2.” (and (match_code “const_int”) (match_test “ival == 2”)))
(define_constraint “P3” “An integer with the value 3.” (and (match_code “const_int”) (match_test “ival == 3”)))
(define_constraint “P4” “An integer with the value 4.” (and (match_code “const_int”) (match_test “ival == 4”)))
(define_constraint “PA” “An integer constant describing any macflag except variants involving M.” (and (match_code “const_int”) (match_test “ival != MACFLAG_M && ival != MACFLAG_IS_M”)))
(define_constraint “PB” “An integer constant describing any macflag involving M.” (and (match_code “const_int”) (match_test “ival == MACFLAG_M || ival == MACFLAG_IS_M”)))
;; Extra constraints
(define_constraint “Q” “A SYMBOL_REF.” (match_code “symbol_ref”))