1;; MMIX constraints 2;; Copyright (C) 2012-2018 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 it 7;; 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, but WITHOUT 12;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 13;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 14;; 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_register_constraint "x" "SYSTEM_REGS" 21 "@internal") 22 23(define_register_constraint "y" "REMAINDER_REG" 24 "@internal") 25 26(define_register_constraint "z" "HIMULT_REG" 27 "@internal") 28 29(define_constraint "I" 30 "A 8-bit unsigned integer" 31 (and (match_code "const_int") 32 (match_test "IN_RANGE (ival, 0, 255)"))) 33 34(define_constraint "J" 35 "A 16-bit unsigned integer." 36 (and (match_code "const_int") 37 (match_test "IN_RANGE (ival, 0, 65535)"))) 38 39(define_constraint "K" 40 "An integer between -255 and 0." 41 (and (match_code "const_int") 42 (match_test "IN_RANGE (ival, -255, 0)"))) 43 44(define_constraint "L" 45 "@internal" 46 (and (match_code "const_int") 47 (match_test "mmix_shiftable_wyde_value (ival)"))) 48 49(define_constraint "M" 50 "The value 0." 51 (and (match_code "const_int") 52 (match_test "ival == 0"))) 53 54(define_constraint "N" 55 "@internal" 56 (and (match_code "const_int") 57 (match_test "mmix_shiftable_wyde_value (~ival)"))) 58 59(define_constraint "O" 60 "The value 3, 5, 9, or 17." 61 (and (match_code "const_int") 62 (ior (match_test "ival == 3") 63 (match_test "ival == 5") 64 (match_test "ival == 9") 65 (match_test "ival == 17")))) 66 67;; FIXME: M (or G) is redundant. 68 69(define_constraint "G" 70 "Floating-point zero." 71 (and (match_code "const_double") 72 (match_test "op == CONST0_RTX (mode)"))) 73 74;; R asks whether x is to be loaded with GETA or something else. Right 75;; now, only a SYMBOL_REF and LABEL_REF can fit for 76;; TARGET_BASE_ADDRESSES. 77;; 78;; Only constant symbolic addresses apply. With TARGET_BASE_ADDRESSES, 79;; we just allow straight LABEL_REF or SYMBOL_REFs with SYMBOL_REF_FLAG 80;; set right now; only function addresses and code labels. If we change 81;; to let SYMBOL_REF_FLAG be set on other symbols, we have to check 82;; inside CONST expressions. When TARGET_BASE_ADDRESSES is not in 83;; effect, a "raw" constant check together with mmix_constant_address_p 84;; is all that's needed; we want all constant addresses to be loaded 85;; with GETA then. 86 87(define_constraint "R" 88 "@internal" 89 (and (not (match_code "const_int,const_double")) 90 (match_test "mmix_constant_address_p (op)") 91 (ior (match_test "!TARGET_BASE_ADDRESSES") 92 (match_code "label_ref") 93 (and (match_code "symbol_ref") 94 (match_test "SYMBOL_REF_FLAG (op)"))))) 95 96;; FIXME: L (or S) is redundant. 97 98(define_constraint "S" 99 "@internal" 100 (and (match_code "const_int,const_double") 101 (match_test "mmix_shiftable_wyde_value (mmix_intval (op))"))) 102 103;; FIXME: N (or T) is redundant. 104 105(define_constraint "T" 106 "@internal" 107 (and (match_code "const_int,const_double") 108 (match_test "mmix_shiftable_wyde_value (~mmix_intval (op))"))) 109 110(define_address_constraint "U" 111 "@internal" 112 (match_operand 0 "mmix_address_operand")) 113 114(define_constraint "Yf" 115 "@internal" 116 (match_operand 0 "frame_pointer_operand")) 117