1;; Constraint definitions for ATMEL AVR micro controllers. 2;; Copyright (C) 2006, 2007 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;; Register constraints 21 22(define_register_constraint "t" "R0_REG" 23 "Temporary register r0") 24 25(define_register_constraint "b" "BASE_POINTER_REGS" 26 "Base pointer registers (r28--r31)") 27 28(define_register_constraint "e" "POINTER_REGS" 29 "Pointer registers (r26--r31)") 30 31(define_register_constraint "w" "ADDW_REGS" 32 "Registers from r24 to r31. These registers 33 can be used in @samp{adiw} command.") 34 35(define_register_constraint "d" "LD_REGS" 36 "Registers from r16 to r31.") 37 38(define_register_constraint "l" "NO_LD_REGS" 39 "Registers from r0 to r15.") 40 41(define_register_constraint "a" "SIMPLE_LD_REGS" 42 "Registers from r16 to r23.") 43 44(define_register_constraint "x" "POINTER_X_REGS" 45 "Register pair X (r27:r26).") 46 47(define_register_constraint "y" "POINTER_Y_REGS" 48 "Register pair Y (r29:r28).") 49 50(define_register_constraint "z" "POINTER_Z_REGS" 51 "Register pair Z (r31:r30).") 52 53(define_register_constraint "q" "STACK_REG" 54 "Stack pointer register (SPH:SPL).") 55 56(define_constraint "I" 57 "Integer constant in the range 0 @dots{} 63." 58 (and (match_code "const_int") 59 (match_test "ival >= 0 && ival <= 63"))) 60 61(define_constraint "J" 62 "Integer constant in the range -63 @dots{} 0." 63 (and (match_code "const_int") 64 (match_test "ival <= 0 && ival >= -63"))) 65 66(define_constraint "K" 67 "Integer constant 2." 68 (and (match_code "const_int") 69 (match_test "ival == 2"))) 70 71(define_constraint "L" 72 "Zero." 73 (and (match_code "const_int") 74 (match_test "ival == 0"))) 75 76(define_constraint "M" 77 "Integer constant in the range 0 @dots{} 0xff." 78 (and (match_code "const_int") 79 (match_test "ival >= 0 && ival <= 0xff"))) 80 81(define_constraint "N" 82 "Constant integer @minus{}1." 83 (and (match_code "const_int") 84 (match_test "ival == -1"))) 85 86(define_constraint "O" 87 "Constant integer 8, 16, or 24." 88 (and (match_code "const_int") 89 (match_test "ival == 8 || ival == 16 || ival == 24"))) 90 91(define_constraint "P" 92 "Constant integer 1." 93 (and (match_code "const_int") 94 (match_test "ival == 1"))) 95 96(define_constraint "G" 97 "Constant float 0." 98 (and (match_code "const_double") 99 (match_test "op == CONST0_RTX (SFmode)"))) 100 101(define_constraint "R" 102 "Integer constant in the range -6 @dots{} 5." 103 (and (match_code "const_int") 104 (match_test "ival >= -6 && ival <= 5"))) 105 106(define_memory_constraint "Q" 107 "A memory address based on Y or Z pointer with displacement." 108 (and (match_code "mem") 109 (match_test "extra_constraint_Q (op)"))) 110