diff options
author | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
---|---|---|
committer | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
commit | 554fd8c5195424bdbcabf5de30fdc183aba391bd (patch) | |
tree | 976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/config/vax/builtins.md | |
download | cbb-gcc-4.6.4-upstream.tar.bz2 cbb-gcc-4.6.4-upstream.tar.xz |
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig;
imported gcc-4.6.4 source tree from verified upstream tarball.
downloading a git-generated archive based on the 'upstream' tag
should provide you with a source tree that is binary identical
to the one extracted from the above tarball.
if you have obtained the source via the command 'git clone',
however, do note that line-endings of files in your working
directory might differ from line-endings of the respective
files in the upstream repository.
Diffstat (limited to 'gcc/config/vax/builtins.md')
-rw-r--r-- | gcc/config/vax/builtins.md | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/gcc/config/vax/builtins.md b/gcc/config/vax/builtins.md new file mode 100644 index 000000000..389526b38 --- /dev/null +++ b/gcc/config/vax/builtins.md @@ -0,0 +1,192 @@ +;; builtin definitions for DEC VAX. +;; Copyright (C) 2007, 2009 Free Software Foundation, Inc. +;; +;; 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_constants + [ + (VUNSPEC_LOCK 100) ; sync lock and test + (VUNSPEC_UNLOCK 101) ; sync lock release + ] +) + +(define_expand "ffssi2" + [(set (match_operand:SI 0 "nonimmediate_operand" "") + (ffs:SI (match_operand:SI 1 "general_operand" "")))] + "" + " +{ + rtx label = gen_label_rtx (); + emit_insn (gen_ffssi2_internal (operands[0], operands[1])); + emit_jump_insn (gen_bne (label)); + emit_insn (gen_negsi2 (operands[0], const1_rtx)); + emit_label (label); + emit_insn (gen_addsi3 (operands[0], operands[0], const1_rtx)); + DONE; +}") + +(define_insn "ffssi2_internal" + [(set (match_operand:SI 0 "nonimmediate_operand" "=rQ") + (ffs:SI (match_operand:SI 1 "general_operand" "nrmT"))) + (set (cc0) (match_dup 0))] + "" + "ffs $0,$32,%1,%0") + +(define_expand "sync_lock_test_and_set<mode>" + [(set (match_operand:VAXint 0 "nonimmediate_operand" "=&g") + (unspec:VAXint [(match_operand:VAXint 1 "memory_operand" "+m") + (match_operand:VAXint 2 "const_int_operand" "n") + ] VUNSPEC_LOCK))] + "" + " +{ + rtx label; + + if (operands[2] != const1_rtx) + FAIL; + + label = gen_label_rtx (); + emit_move_insn (operands[0], const1_rtx); + emit_jump_insn (gen_jbbssi<mode> (operands[1], const0_rtx, label, operands[1])); + emit_move_insn (operands[0], const0_rtx); + emit_label (label); + DONE; +}") + +(define_insn "jbbssiqi" + [(parallel + [(set (pc) + (if_then_else + (ne (zero_extract:SI (match_operand:QI 0 "memory_operand" "g") + (const_int 1) + (match_operand:SI 1 "general_operand" "nrm")) + (const_int 0)) + (label_ref (match_operand 2 "" "")) + (pc))) + (set (zero_extract:SI (match_operand:QI 3 "memory_operand" "+0") + (const_int 1) + (match_dup 1)) + (const_int 1))])] + "" + "jbssi %1,%0,%l2") + +(define_insn "jbbssihi" + [(parallel + [(set (pc) + (if_then_else + (ne (zero_extract:SI (match_operand:HI 0 "memory_operand" "Q") + (const_int 1) + (match_operand:SI 1 "general_operand" "nrm")) + (const_int 0)) + (label_ref (match_operand 2 "" "")) + (pc))) + (set (zero_extract:SI (match_operand:HI 3 "memory_operand" "+0") + (const_int 1) + (match_dup 1)) + (const_int 1))])] + "" + "jbssi %1,%0,%l2") + +(define_insn "jbbssisi" + [(parallel + [(set (pc) + (if_then_else + (ne (zero_extract:SI (match_operand:SI 0 "memory_operand" "Q") + (const_int 1) + (match_operand:SI 1 "general_operand" "nrm")) + (const_int 0)) + (label_ref (match_operand 2 "" "")) + (pc))) + (set (zero_extract:SI (match_operand:SI 3 "memory_operand" "+0") + (const_int 1) + (match_dup 1)) + (const_int 1))])] + "" + "jbssi %1,%0,%l2") + + +(define_expand "sync_lock_release<mode>" + [(set (match_operand:VAXint 0 "memory_operand" "+m") + (unspec:VAXint [(match_operand:VAXint 1 "const_int_operand" "n") + ] VUNSPEC_UNLOCK))] + "" + " +{ + rtx label; + if (operands[1] != const0_rtx) + FAIL; +#if 1 + label = gen_label_rtx (); + emit_jump_insn (gen_jbbcci<mode> (operands[0], const0_rtx, label, operands[0])); + emit_label (label); +#else + emit_move_insn (operands[0], const0_rtx); +#endif + DONE; +}") + +(define_insn "jbbcciqi" + [(parallel + [(set (pc) + (if_then_else + (eq (zero_extract:SI (match_operand:QI 0 "memory_operand" "g") + (const_int 1) + (match_operand:SI 1 "general_operand" "nrm")) + (const_int 0)) + (label_ref (match_operand 2 "" "")) + (pc))) + (set (zero_extract:SI (match_operand:QI 3 "memory_operand" "+0") + (const_int 1) + (match_dup 1)) + (const_int 0))])] + "" + "jbcci %1,%0,%l2") + +(define_insn "jbbccihi" + [(parallel + [(set (pc) + (if_then_else + (eq (zero_extract:SI (match_operand:HI 0 "memory_operand" "Q") + (const_int 1) + (match_operand:SI 1 "general_operand" "nrm")) + (const_int 0)) + (label_ref (match_operand 2 "" "")) + (pc))) + (set (zero_extract:SI (match_operand:HI 3 "memory_operand" "+0") + (const_int 1) + (match_dup 1)) + (const_int 0))])] + "" + "jbcci %1,%0,%l2") + +(define_insn "jbbccisi" + [(parallel + [(set (pc) + (if_then_else + (eq (zero_extract:SI (match_operand:SI 0 "memory_operand" "Q") + (const_int 1) + (match_operand:SI 1 "general_operand" "nrm")) + (const_int 0)) + (label_ref (match_operand 2 "" "")) + (pc))) + (set (zero_extract:SI (match_operand:SI 3 "memory_operand" "+0") + (const_int 1) + (match_dup 1)) + (const_int 0))])] + "" + "jbcci %1,%0,%l2") + |