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