xref: /netbsd-src/external/gpl3/gdb/dist/cpu/mep-fmax.cpu (revision a2e2270fc5bff6bcbd2c81db532c53a470bd1be5)
1*a2e2270fSchristos; Toshiba MeP FMAX Coprocessor description.  -*- Scheme -*-
2*a2e2270fSchristos; Copyright 2011 Free Software Foundation, Inc.
3*a2e2270fSchristos;
4*a2e2270fSchristos; Contributed by Red Hat Inc;
5*a2e2270fSchristos;
6*a2e2270fSchristos; This file is part of the GNU Binutils.
7*a2e2270fSchristos;
8*a2e2270fSchristos; This program is free software; you can redistribute it and/or modify
9*a2e2270fSchristos; it under the terms of the GNU General Public License as published by
10*a2e2270fSchristos; the Free Software Foundation; either version 3 of the License, or
11*a2e2270fSchristos; (at your option) any later version.
12*a2e2270fSchristos;
13*a2e2270fSchristos; This program is distributed in the hope that it will be useful,
14*a2e2270fSchristos; but WITHOUT ANY WARRANTY; without even the implied warranty of
15*a2e2270fSchristos; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16*a2e2270fSchristos; GNU General Public License for more details.
17*a2e2270fSchristos;
18*a2e2270fSchristos; You should have received a copy of the GNU General Public License
19*a2e2270fSchristos; along with this program; if not, write to the Free Software
20*a2e2270fSchristos; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21*a2e2270fSchristos; MA 02110-1301, USA.
22*a2e2270fSchristos
23*a2e2270fSchristos;------------------------------------------------------------------------------
24*a2e2270fSchristos; MeP-Integrator will redefine the isa pmacros below to allow the bit widths
25*a2e2270fSchristos; specified below for each ME_MODULE using this coprocessor.
26*a2e2270fSchristos; This coprocessor requires only the 32 bit insns in the core.
27*a2e2270fSchristos;------------------------------------------------------------------------------
28*a2e2270fSchristos; begin-isas
29*a2e2270fSchristos(define-pmacro fmax-core-isa () (ISA ext_core2))
30*a2e2270fSchristos(define-pmacro all-fmax-isas () (ISA ext_core2))
31*a2e2270fSchristos; end-isas
32*a2e2270fSchristos
33*a2e2270fSchristos;******************************************************************************
34*a2e2270fSchristos; ifields
35*a2e2270fSchristos;------------------------------------------------------------------------------
36*a2e2270fSchristos; opcodes
37*a2e2270fSchristos(dnf f-fmax-0-4  "opcode" (all-fmax-isas)  0 4)
38*a2e2270fSchristos(dnf f-fmax-4-4  "opcode" (all-fmax-isas)  4 4)
39*a2e2270fSchristos(dnf f-fmax-8-4  "opcode" (all-fmax-isas)  8 4)
40*a2e2270fSchristos(dnf f-fmax-12-4 "opcode" (all-fmax-isas) 12 4)
41*a2e2270fSchristos(dnf f-fmax-16-4 "opcode" (all-fmax-isas) 16 4)
42*a2e2270fSchristos(dnf f-fmax-20-4 "opcode" (all-fmax-isas) 20 4)
43*a2e2270fSchristos(dnf f-fmax-24-4 "opcode" (all-fmax-isas) 24 4)
44*a2e2270fSchristos(dnf f-fmax-28-1 "opcode" (all-fmax-isas) 28 1)
45*a2e2270fSchristos(dnf f-fmax-29-1 "opcode" (all-fmax-isas) 29 1)
46*a2e2270fSchristos(dnf f-fmax-30-1 "opcode" (all-fmax-isas) 30 1)
47*a2e2270fSchristos(dnf f-fmax-31-1 "opcode" (all-fmax-isas) 31 1)
48*a2e2270fSchristos
49*a2e2270fSchristos;------------------------------------------------------------------------------
50*a2e2270fSchristos; FR registers
51*a2e2270fSchristos(define-multi-ifield
52*a2e2270fSchristos  (name f-fmax-frd)
53*a2e2270fSchristos  (comment "FRd register")
54*a2e2270fSchristos  (attrs all-fmax-isas)
55*a2e2270fSchristos  (mode UINT)
56*a2e2270fSchristos  (subfields f-fmax-28-1 f-fmax-4-4)
57*a2e2270fSchristos  (insert (sequence ()
58*a2e2270fSchristos		    (set (ifield f-fmax-4-4) (and (ifield f-fmax-frd) #xf))
59*a2e2270fSchristos		    (set (ifield f-fmax-28-1) (srl (ifield f-fmax-frd) 4))))
60*a2e2270fSchristos  (extract (set (ifield f-fmax-frd)
61*a2e2270fSchristos		(or (sll (ifield f-fmax-28-1) 4) (ifield f-fmax-4-4))))
62*a2e2270fSchristos)
63*a2e2270fSchristos(define-multi-ifield
64*a2e2270fSchristos  (name f-fmax-frn)
65*a2e2270fSchristos  (comment "FRn register")
66*a2e2270fSchristos  (attrs all-fmax-isas)
67*a2e2270fSchristos  (mode UINT)
68*a2e2270fSchristos  (subfields f-fmax-29-1 f-fmax-20-4)
69*a2e2270fSchristos  (insert (sequence ()
70*a2e2270fSchristos		    (set (ifield f-fmax-20-4) (and (ifield f-fmax-frn) #xf))
71*a2e2270fSchristos		    (set (ifield f-fmax-29-1) (srl (ifield f-fmax-frn) 4))))
72*a2e2270fSchristos  (extract (set (ifield f-fmax-frn)
73*a2e2270fSchristos		(or (sll (ifield f-fmax-29-1) 4) (ifield f-fmax-20-4))))
74*a2e2270fSchristos)
75*a2e2270fSchristos(define-multi-ifield
76*a2e2270fSchristos  (name f-fmax-frm)
77*a2e2270fSchristos  (comment "FRm register")
78*a2e2270fSchristos  (attrs all-fmax-isas)
79*a2e2270fSchristos  (mode UINT)
80*a2e2270fSchristos  (subfields f-fmax-30-1 f-fmax-24-4)
81*a2e2270fSchristos  (insert (sequence ()
82*a2e2270fSchristos		    (set (ifield f-fmax-24-4) (and (ifield f-fmax-frm) #xf))
83*a2e2270fSchristos		    (set (ifield f-fmax-30-1) (srl (ifield f-fmax-frm) 4))))
84*a2e2270fSchristos  (extract (set (ifield f-fmax-frm)
85*a2e2270fSchristos		(or (sll (ifield f-fmax-30-1) 4) (ifield f-fmax-24-4))))
86*a2e2270fSchristos)
87*a2e2270fSchristos
88*a2e2270fSchristos;------------------------------------------------------------------------------
89*a2e2270fSchristos; Core General registers
90*a2e2270fSchristos(dnf f-fmax-rm  "opcode" (all-fmax-isas)  8 4)
91*a2e2270fSchristos
92*a2e2270fSchristos;------------------------------------------------------------------------------
93*a2e2270fSchristos; Condition opcodes enum
94*a2e2270fSchristos(define-normal-insn-enum fmax-cond "condition opcode enum" (all-fmax-isas) FMAX_ f-fmax-8-4
95*a2e2270fSchristos  ("f"  "u"  "e"  "ue"  "l"  "ul"  "le"  "ule"
96*a2e2270fSchristos   "fi" "ui" "ei" "uei" "li" "uli" "lei" "ulei")
97*a2e2270fSchristos)
98*a2e2270fSchristos
99*a2e2270fSchristos;******************************************************************************
100*a2e2270fSchristos; Hardware
101*a2e2270fSchristos;------------------------------------------------------------------------------
102*a2e2270fSchristos; FR registers
103*a2e2270fSchristos
104*a2e2270fSchristos; Given a coprocessor register number N, expand to a
105*a2e2270fSchristos; name/index pair: ($frN N)
106*a2e2270fSchristos(define-pmacro (-fmax-fr-reg-pair n) ((.sym "fr" n) n))
107*a2e2270fSchristos(define-pmacro (-fmax-cr-reg-pair n) ((.sym "c" n) n))
108*a2e2270fSchristos
109*a2e2270fSchristos; NOTE: This exists solely for the purpose of providing the proper register names for this coprocessor.
110*a2e2270fSchristos; GDB will use the hardware table generated from this declaration. The operands use h-cr
111*a2e2270fSchristos; from mep-core.cpu so that SID's semantic trace will be consistent between
112*a2e2270fSchristos; the core and the coprocessor but use parse/print handlers which reference the hardware table
113*a2e2270fSchristos; generated from this declarations
114*a2e2270fSchristos(define-hardware
115*a2e2270fSchristos  (name h-cr-fmax)
116*a2e2270fSchristos  (comment "Floating point registers")
117*a2e2270fSchristos  (attrs all-fmax-isas VIRTUAL IS_FLOAT)
118*a2e2270fSchristos  (type register SF (32))
119*a2e2270fSchristos  (indices keyword "$"
120*a2e2270fSchristos	   (.splice (.unsplice (.map -fmax-fr-reg-pair (.iota 32)))
121*a2e2270fSchristos		    (.unsplice (.map -fmax-cr-reg-pair (.iota 32))))
122*a2e2270fSchristos  )
123*a2e2270fSchristos  (get (index) (c-call SF "fmax_fr_get_handler" index))
124*a2e2270fSchristos  (set (index newval) (c-call VOID "fmax_fr_set_handler" index newval))
125*a2e2270fSchristos)
126*a2e2270fSchristos
127*a2e2270fSchristos;------------------------------------------------------------------------------
128*a2e2270fSchristos; Control registers
129*a2e2270fSchristos; NOTE: This exists solely for the purpose of providing the proper register names for this coprocessor.
130*a2e2270fSchristos; GDB will use the hardware table generated from this declaration. The operands use h-ccr
131*a2e2270fSchristos; from mep-core.cpu so that SID's semantic trace will be consistent between
132*a2e2270fSchristos; the core and the coprocessor but use parse/print handlers which reference the hardware table
133*a2e2270fSchristos; generated from this declarations
134*a2e2270fSchristos(define-hardware
135*a2e2270fSchristos  (name h-ccr-fmax)
136*a2e2270fSchristos  (comment "Coprocessor Identifier and Revision Register")
137*a2e2270fSchristos  (attrs all-fmax-isas VIRTUAL)
138*a2e2270fSchristos  (type register USI (16))
139*a2e2270fSchristos  (indices keyword "$" (
140*a2e2270fSchristos		       ("cirr"  0) ("fcr0"   0) ("ccr0"   0)
141*a2e2270fSchristos		       ("cbcr"  1) ("fcr1"   1) ("ccr1"   1)
142*a2e2270fSchristos		       ("cerr" 15) ("fcr15" 15) ("ccr15" 15)
143*a2e2270fSchristos                      )
144*a2e2270fSchristos  )
145*a2e2270fSchristos  (set (index newval) (c-call VOID "h_ccr_set" index newval))
146*a2e2270fSchristos  (get (index) (c-call SI "h_ccr_get" index))
147*a2e2270fSchristos)
148*a2e2270fSchristos
149*a2e2270fSchristos;------------------------------------------------------------------------------
150*a2e2270fSchristos; Misc
151*a2e2270fSchristos(define-hardware
152*a2e2270fSchristos  (name h-fmax-compare-i-p)
153*a2e2270fSchristos  (comment "flag")
154*a2e2270fSchristos  (attrs all-fmax-isas)
155*a2e2270fSchristos  (type register USI)
156*a2e2270fSchristos)
157*a2e2270fSchristos
158*a2e2270fSchristos;******************************************************************************
159*a2e2270fSchristos; Operands
160*a2e2270fSchristos;------------------------------------------------------------------------------
161*a2e2270fSchristos; FR Registers
162*a2e2270fSchristos(define-full-operand fmax-FRd "FRd" (all-fmax-isas (CDATA FMAX_FLOAT)) h-cr SF f-fmax-frd ((parse "fmax_cr") (print "fmax_cr")) () ())
163*a2e2270fSchristos(define-full-operand fmax-FRn "FRn" (all-fmax-isas (CDATA FMAX_FLOAT)) h-cr SF f-fmax-frn ((parse "fmax_cr") (print "fmax_cr")) () ())
164*a2e2270fSchristos(define-full-operand fmax-FRm "FRm" (all-fmax-isas (CDATA FMAX_FLOAT)) h-cr SF f-fmax-frm ((parse "fmax_cr") (print "fmax_cr")) () ())
165*a2e2270fSchristos
166*a2e2270fSchristos(define-full-operand fmax-FRd-int "FRd as an integer" (all-fmax-isas (CDATA FMAX_INT)) h-cr SI f-fmax-frd ((parse "fmax_cr") (print "fmax_cr")) () ())
167*a2e2270fSchristos(define-full-operand fmax-FRn-int "FRn as an integer" (all-fmax-isas (CDATA FMAX_INT)) h-cr SI f-fmax-frn ((parse "fmax_cr") (print "fmax_cr")) () ())
168*a2e2270fSchristos
169*a2e2270fSchristos;------------------------------------------------------------------------------
170*a2e2270fSchristos; Control registers
171*a2e2270fSchristos(define-full-operand fmax-CCRn "CCRn" (all-fmax-isas (CDATA REGNUM)) h-ccr DFLT f-fmax-4-4 ((parse "fmax_ccr") (print "fmax_ccr")) () ())
172*a2e2270fSchristos
173*a2e2270fSchristos(dnop fmax-CIRR "CIRR" (all-fmax-isas SEM-ONLY) h-ccr 0)
174*a2e2270fSchristos(dnop fmax-CBCR "CBCR" (all-fmax-isas SEM-ONLY) h-ccr 1)
175*a2e2270fSchristos(dnop fmax-CERR "CERR" (all-fmax-isas SEM-ONLY) h-ccr 15)
176*a2e2270fSchristos
177*a2e2270fSchristos;------------------------------------------------------------------------------
178*a2e2270fSchristos; Core General Registers
179*a2e2270fSchristos(dnop fmax-Rm "Rm" (all-fmax-isas) h-gpr f-fmax-rm)
180*a2e2270fSchristos
181*a2e2270fSchristos;------------------------------------------------------------------------------
182*a2e2270fSchristos; misc
183*a2e2270fSchristos(dnop fmax-Compare-i-p "flag" (all-fmax-isas SEM-ONLY) h-fmax-compare-i-p f-nil)
184*a2e2270fSchristos
185*a2e2270fSchristos;******************************************************************************
186*a2e2270fSchristos; Instructions
187*a2e2270fSchristos;------------------------------------------------------------------------------
188*a2e2270fSchristos; Binary Arithmetic
189*a2e2270fSchristos(define-pmacro (fmax-binary-arith op opc sem)
190*a2e2270fSchristos  (dni op
191*a2e2270fSchristos       (.str op " FRd,FRn,FRm")
192*a2e2270fSchristos       (all-fmax-isas MAY_TRAP)
193*a2e2270fSchristos       (.str op " ${fmax-FRd},${fmax-FRn},${fmax-FRm}")
194*a2e2270fSchristos       (+ (f-fmax-0-4 #xF) fmax-FRd (f-fmax-8-4 opc) (f-fmax-12-4 #x7) (f-fmax-16-4 0)
195*a2e2270fSchristos	  fmax-FRn fmax-FRm (f-fmax-31-1 0))
196*a2e2270fSchristos       sem
197*a2e2270fSchristos       ()
198*a2e2270fSchristos  )
199*a2e2270fSchristos)
200*a2e2270fSchristos
201*a2e2270fSchristos(fmax-binary-arith fadds #x0 (set fmax-FRd (add fmax-FRn fmax-FRm)))
202*a2e2270fSchristos(fmax-binary-arith fsubs #x1 (set fmax-FRd (sub fmax-FRn fmax-FRm)))
203*a2e2270fSchristos(fmax-binary-arith fmuls #x2 (set fmax-FRd (mul fmax-FRn fmax-FRm)))
204*a2e2270fSchristos(fmax-binary-arith fdivs #x3 (set fmax-FRd (div fmax-FRn fmax-FRm)))
205*a2e2270fSchristos
206*a2e2270fSchristos;------------------------------------------------------------------------------
207*a2e2270fSchristos; Unary Arithmetic
208*a2e2270fSchristos(define-pmacro (fmax-unary-arith op opc sem)
209*a2e2270fSchristos  (dni op
210*a2e2270fSchristos       (.str op " FRd,FRn")
211*a2e2270fSchristos       (all-fmax-isas MAY_TRAP)
212*a2e2270fSchristos       (.str op " ${fmax-FRd},${fmax-FRn}")
213*a2e2270fSchristos       (+ (f-fmax-0-4 #xF) fmax-FRd (f-fmax-8-4 opc) (f-fmax-12-4 #x7)
214*a2e2270fSchristos	  (f-fmax-16-4 0)  fmax-FRn (f-fmax-24-4 0) (f-fmax-30-1 0) (f-fmax-31-1 0))
215*a2e2270fSchristos       sem
216*a2e2270fSchristos       ()
217*a2e2270fSchristos  )
218*a2e2270fSchristos)
219*a2e2270fSchristos
220*a2e2270fSchristos(fmax-unary-arith fsqrts #x4 (set fmax-FRd (sqrt fmax-FRn)))
221*a2e2270fSchristos(fmax-unary-arith fabss  #x5 (set fmax-FRd (abs fmax-FRn)))
222*a2e2270fSchristos(fmax-unary-arith fnegs  #x7 (set fmax-FRd (neg fmax-FRn)))
223*a2e2270fSchristos(fmax-unary-arith fmovs  #x6 (set fmax-FRd fmax-FRn))
224*a2e2270fSchristos
225*a2e2270fSchristos;------------------------------------------------------------------------------
226*a2e2270fSchristos; Conversions
227*a2e2270fSchristos(define-pmacro (fmax-conv op opc1 opc2 opnd1 opnd2 sem)
228*a2e2270fSchristos  (dni op
229*a2e2270fSchristos       (.str op " FRd,FRn")
230*a2e2270fSchristos       (all-fmax-isas MAY_TRAP)
231*a2e2270fSchristos       (.str op " ${" opnd1 "},${" opnd2 "}")
232*a2e2270fSchristos       (+ (f-fmax-0-4 #xF) opnd1 (f-fmax-8-4 opc1) (f-fmax-12-4 #x7)
233*a2e2270fSchristos	  (f-fmax-16-4 opc2)  opnd2 (f-fmax-24-4 0) (f-fmax-30-1 0) (f-fmax-31-1 0))
234*a2e2270fSchristos       sem
235*a2e2270fSchristos       ()
236*a2e2270fSchristos  )
237*a2e2270fSchristos)
238*a2e2270fSchristos
239*a2e2270fSchristos(fmax-conv froundws #xC #x0 fmax-FRd-int fmax-FRn     (set fmax-FRd-int (c-call SI "fmax_froundws" fmax-FRn)))
240*a2e2270fSchristos(fmax-conv ftruncws #xD #x0 fmax-FRd-int fmax-FRn     (set fmax-FRd-int (c-call SI "fmax_ftruncws" fmax-FRn)))
241*a2e2270fSchristos(fmax-conv fceilws  #xE #x0 fmax-FRd-int fmax-FRn     (set fmax-FRd-int (c-call SI "fmax_fceilws" fmax-FRn)))
242*a2e2270fSchristos(fmax-conv ffloorws #xF #x0 fmax-FRd-int fmax-FRn     (set fmax-FRd-int (c-call SI "fmax_ffloorws" fmax-FRn)))
243*a2e2270fSchristos(fmax-conv fcvtws   #x4 #x1 fmax-FRd-int fmax-FRn     (set fmax-FRd-int (c-call SI "fmax_fcvtws" fmax-FRn)))
244*a2e2270fSchristos(fmax-conv fcvtsw   #x0 #x9 fmax-FRd     fmax-FRn-int (set fmax-FRd (float SF FPCONV-DEFAULT fmax-FRn-int)))
245*a2e2270fSchristos
246*a2e2270fSchristos;------------------------------------------------------------------------------
247*a2e2270fSchristos; Comparisons
248*a2e2270fSchristos;
249*a2e2270fSchristos; Comparison with no exceptions
250*a2e2270fSchristos(define-pmacro (fmax-f-sem x y)  (andif (gt x y) (lt x y))) ; do this to get exception detection
251*a2e2270fSchristos(define-pmacro (fmax-u-sem x y)  (not (orif (lt x y) (orif (eq x y) (gt x y)))))
252*a2e2270fSchristos(define-pmacro (fmax-e-sem x y)  (eq x y))
253*a2e2270fSchristos(define-pmacro (fmax-ue-sem x y) (not (orif (lt x y) (gt x y))))
254*a2e2270fSchristos(define-pmacro (fmax-l-sem x y)  (lt x y))
255*a2e2270fSchristos(define-pmacro (fmax-ul-sem x y) (not (orif (gt x y) (eq x y))))
256*a2e2270fSchristos(define-pmacro (fmax-le-sem x y) (orif (lt x y) (eq x y)))
257*a2e2270fSchristos(define-pmacro (fmax-ule-sem x y) (not (gt x y)))
258*a2e2270fSchristos
259*a2e2270fSchristos(define-pmacro (fmax-comp cond suffix exceptions)
260*a2e2270fSchristos  (dni (.sym fcmp cond suffix s)
261*a2e2270fSchristos       (.str "fcmp" cond suffix "s FRn,FRm")
262*a2e2270fSchristos       ;; Even though the instruction doesn't really trap if EXCEPTIONS
263*a2e2270fSchristos       ;; is zero, we don't want gcc to put it in a repeat or erepeat
264*a2e2270fSchristos       ;; block because of the hazards between fcmp instructions and
265*a2e2270fSchristos       ;; anything that reads CBCR.
266*a2e2270fSchristos       (all-fmax-isas MAY_TRAP)
267*a2e2270fSchristos       (.str "fcmp" cond suffix "s ${fmax-FRn},${fmax-FRm}")
268*a2e2270fSchristos       (+ (f-fmax-0-4 #xF) (f-fmax-4-4 0) (.sym FMAX_ cond suffix) (f-fmax-12-4 #x7)
269*a2e2270fSchristos	  (f-fmax-16-4 #x2) (f-fmax-28-1 0) fmax-FRn fmax-FRm (f-fmax-31-1 0))
270*a2e2270fSchristos       (sequence ()
271*a2e2270fSchristos		 (set fmax-Compare-i-p exceptions)
272*a2e2270fSchristos		 (set fmax-CBCR ((.sym fmax- cond -sem) fmax-FRn fmax-FRm))
273*a2e2270fSchristos		 (set fmax-Compare-i-p 0)
274*a2e2270fSchristos       )
275*a2e2270fSchristos       ()
276*a2e2270fSchristos  )
277*a2e2270fSchristos)
278*a2e2270fSchristos
279*a2e2270fSchristos; Comparison with no exceptions
280*a2e2270fSchristos(fmax-comp f   "" 0)
281*a2e2270fSchristos(fmax-comp u   "" 0)
282*a2e2270fSchristos(fmax-comp e   "" 0)
283*a2e2270fSchristos(fmax-comp ue  "" 0)
284*a2e2270fSchristos(fmax-comp l   "" 0)
285*a2e2270fSchristos(fmax-comp ul  "" 0)
286*a2e2270fSchristos(fmax-comp le  "" 0)
287*a2e2270fSchristos(fmax-comp ule "" 0)
288*a2e2270fSchristos
289*a2e2270fSchristos; Comparison with exceptions
290*a2e2270fSchristos(fmax-comp f   i 1)
291*a2e2270fSchristos(fmax-comp u   i 1)
292*a2e2270fSchristos(fmax-comp e   i 1)
293*a2e2270fSchristos(fmax-comp ue  i 1)
294*a2e2270fSchristos(fmax-comp l   i 1)
295*a2e2270fSchristos(fmax-comp ul  i 1)
296*a2e2270fSchristos(fmax-comp le  i 1)
297*a2e2270fSchristos(fmax-comp ule i 1)
298*a2e2270fSchristos
299*a2e2270fSchristos;------------------------------------------------------------------------------
300*a2e2270fSchristos; Move to/from core registers
301*a2e2270fSchristos(dni cmov-frn-rm
302*a2e2270fSchristos     "cmov FRn,Rm"
303*a2e2270fSchristos     (all-fmax-isas (INTRINSIC "cmov1"))
304*a2e2270fSchristos     "cmov ${fmax-FRd-int},${fmax-Rm}"
305*a2e2270fSchristos     (+ (f-fmax-0-4 #xF) fmax-FRd-int fmax-Rm (f-fmax-12-4 #x7)
306*a2e2270fSchristos	(f-fmax-16-4 #xF) (f-fmax-20-4 0) (f-fmax-24-4 0)
307*a2e2270fSchristos	(f-fmax-29-1 0) (f-fmax-30-1 0) (f-fmax-31-1 0))
308*a2e2270fSchristos     (set fmax-FRd-int fmax-Rm)
309*a2e2270fSchristos     ()
310*a2e2270fSchristos)
311*a2e2270fSchristos(dni cmov-rm-frn
312*a2e2270fSchristos     "cmov Rm,FRn"
313*a2e2270fSchristos     (all-fmax-isas (INTRINSIC "cmov2"))
314*a2e2270fSchristos     "cmov ${fmax-Rm},${fmax-FRd-int}"
315*a2e2270fSchristos     (+ (f-fmax-0-4 #xF) fmax-FRd-int fmax-Rm (f-fmax-12-4 #x7)
316*a2e2270fSchristos	(f-fmax-16-4 #xF) (f-fmax-20-4 0) (f-fmax-24-4 0)
317*a2e2270fSchristos	(f-fmax-29-1 0) (f-fmax-30-1 0) (f-fmax-31-1 1))
318*a2e2270fSchristos     (set fmax-Rm fmax-FRd-int)
319*a2e2270fSchristos     ()
320*a2e2270fSchristos)
321*a2e2270fSchristos(dni cmovc-ccrn-rm
322*a2e2270fSchristos     "cmovc CCRn,Rm"
323*a2e2270fSchristos     (all-fmax-isas (INTRINSIC "cmovc1"))
324*a2e2270fSchristos     "cmovc ${fmax-CCRn},${fmax-Rm}"
325*a2e2270fSchristos     (+ (f-fmax-0-4 #xF) fmax-CCRn fmax-Rm (f-fmax-12-4 #x7)
326*a2e2270fSchristos	(f-fmax-16-4 #xF) (f-fmax-20-4 0) (f-fmax-24-4 0)
327*a2e2270fSchristos	(f-fmax-28-1 0) (f-fmax-29-1 0) (f-fmax-30-1 1) (f-fmax-31-1 0))
328*a2e2270fSchristos     (set fmax-CCRn fmax-Rm)
329*a2e2270fSchristos     ()
330*a2e2270fSchristos)
331*a2e2270fSchristos(dni cmovc-rm-ccrn
332*a2e2270fSchristos     "cmovc Rm,CCRn"
333*a2e2270fSchristos     (all-fmax-isas (INTRINSIC "cmovc2"))
334*a2e2270fSchristos     "cmovc ${fmax-Rm},${fmax-CCRn}"
335*a2e2270fSchristos     (+ (f-fmax-0-4 #xF) fmax-CCRn fmax-Rm (f-fmax-12-4 #x7)
336*a2e2270fSchristos	(f-fmax-16-4 #xF) (f-fmax-20-4 0) (f-fmax-24-4 0)
337*a2e2270fSchristos	(f-fmax-28-1 0) (f-fmax-29-1 0) (f-fmax-30-1 1) (f-fmax-31-1 1))
338*a2e2270fSchristos     (set fmax-Rm fmax-CCRn)
339*a2e2270fSchristos     ()
340*a2e2270fSchristos)
341