aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/or1k/constraints.md
diff options
context:
space:
mode:
authorStafford Horne <shorne@gmail.com>2018-11-09 12:16:14 +0000
committerStafford Horne <shorne@gcc.gnu.org>2018-11-09 12:16:14 +0000
commit3965b35f341cc99a10876518f707740a9e912a01 (patch)
tree2233000c45797cf07e84d8e3ed4b4f37aa16ace3 /gcc/config/or1k/constraints.md
parent1d6ff15057c18d72b231f60e526273b41e362283 (diff)
downloadgcc-3965b35f341cc99a10876518f707740a9e912a01.zip
gcc-3965b35f341cc99a10876518f707740a9e912a01.tar.gz
gcc-3965b35f341cc99a10876518f707740a9e912a01.tar.bz2
or1k: gcc: initial support for openrisc
2018-11-09 Stafford Horne <shorne@gmail.com> Richard Henderson <rth@twiddle.net> Joel Sherrill <joel@rtems.org> * common/config/or1k/or1k-common.c: New file. * config/or1k/*: New. * config.gcc (or1k*-*-*): New. * configure.ac (or1k*-*-*): New test for openrisc tls. * configure: Regenerated. * doc/install.texi: Document OpenRISC triplets. * doc/invoke.texi: Document OpenRISC arguments. * doc/md.texi: Document OpenRISC. Co-Authored-By: Joel Sherrill <joel@rtems.org> Co-Authored-By: Richard Henderson <rth@twiddle.net> From-SVN: r265963
Diffstat (limited to 'gcc/config/or1k/constraints.md')
-rw-r--r--gcc/config/or1k/constraints.md55
1 files changed, 55 insertions, 0 deletions
diff --git a/gcc/config/or1k/constraints.md b/gcc/config/or1k/constraints.md
new file mode 100644
index 0000000..2e7797b
--- /dev/null
+++ b/gcc/config/or1k/constraints.md
@@ -0,0 +1,55 @@
+;; Constraint definitions for OpenRISC
+;; Copyright (C) 2018 Free Software Foundation, Inc.
+;; Contributed by Stafford Horne
+
+;; 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/>.
+
+;; -------------------------------------------------------------------------
+;; Constraints
+;; -------------------------------------------------------------------------
+
+; We use:
+; c - sibcall registers
+; I - constant signed 16-bit
+; K - constant unsigned 16-bit
+; M - constant signed 16-bit shifted left 16-bits (l.movhi)
+; O - constant zero
+
+(define_register_constraint "c" "SIBCALL_REGS"
+ "Registers which can hold a sibling call address")
+
+;; Immediates
+(define_constraint "I"
+ "A signed 16-bit immediate in the range -32768 to 32767."
+ (and (match_code "const_int")
+ (match_test "IN_RANGE (ival, -32768, 32767)")))
+
+(define_constraint "K"
+ "An unsigned 16-bit immediate in the range 0 to 0xffff."
+ (and (match_code "const_int")
+ (match_test "IN_RANGE (ival, 0, 65535)")))
+
+(define_constraint "M"
+ "A shifted signed 16-bit constant suitable for l.movhi."
+ (and (match_code "const_int")
+ (match_test "(ival & 0xffff) == 0
+ && (ival >> 31 == -1 || ival >> 31 == 0)")))
+
+(define_constraint "O"
+ "The constant zero"
+ (and (match_code "const_int")
+ (match_test "ival == 0")))