]>
Commit | Line | Data |
---|---|---|
450b0ebb | 1 | ;; Machine description for Xilinx MicroBlaze synchronization instructions. |
85ec4feb | 2 | ;; Copyright (C) 2011-2018 Free Software Foundation, Inc. |
450b0ebb DH |
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 | |
8 | ;; by the Free Software Foundation; either version 3, or (at your | |
9 | ;; option) 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_insn "atomic_compare_and_swapsi" | |
21 | [(match_operand:SI 0 "register_operand" "=&d") ;; bool output | |
22 | (match_operand:SI 1 "register_operand" "=&d") ;; val output | |
23 | (match_operand:SI 2 "nonimmediate_operand" "+Q") ;; memory | |
24 | (match_operand:SI 3 "register_operand" "d") ;; expected value | |
25 | (match_operand:SI 4 "register_operand" "d") ;; desired value | |
26 | (match_operand:SI 5 "const_int_operand" "") ;; is_weak | |
27 | (match_operand:SI 6 "const_int_operand" "") ;; mod_s | |
28 | (match_operand:SI 7 "const_int_operand" "") ;; mod_f | |
29 | (clobber (match_scratch:SI 8 "=&d"))] | |
30 | "" | |
31 | { | |
32 | output_asm_insn ("addc \tr0,r0,r0", operands); | |
33 | output_asm_insn ("lwx \t%1,%y2,r0", operands); | |
34 | output_asm_insn ("addic\t%8,r0,0", operands); | |
35 | output_asm_insn ("bnei \t%8,.-8", operands); | |
36 | output_asm_insn ("cmp \t%0,%1,%3", operands); | |
37 | output_asm_insn ("bnei \t%0,.+16", operands); | |
38 | output_asm_insn ("swx \t%4,%y2,r0", operands); | |
39 | output_asm_insn ("addic\t%8,r0,0", operands); | |
40 | output_asm_insn ("bnei \t%8,.-28", operands); | |
41 | return ""; | |
42 | } | |
43 | ) |