SparcInstrInfo.td revision 13e1501c91e3e56740a59eb7dab173c1d0cf5765
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===- SparcV8Instrs.td - Target Description for SparcV8 Target -----------===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file was developed by the LLVM research group and is distributed under
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the University of Illinois Open Source License. See LICENSE.TXT for details.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 
8a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch//===----------------------------------------------------------------------===//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// This file describes the SparcV8 instructions in TableGen format.
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Instruction format superclass
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class InstV8 : Instruction {          // SparcV8 instruction baseline
1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  field bits<32> Inst;
2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Namespace = "V8";
2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bits<2> op;
2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{31-30} = op;               // Top two bits are the 'op' field
2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Bit attributes specific to SparcV8 instructions
2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bit isPasi       = 0; // Does this instruction affect an alternate addr space?
2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bit isPrivileged = 0; // Is this a privileged instruction?
2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)include "SparcV8InstrFormats.td"
3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)//===----------------------------------------------------------------------===//
3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Instructions
3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)//===----------------------------------------------------------------------===//
3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Pseudo instructions.
3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class PseudoInstV8<string asmstr, dag ops> : InstV8  {
3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let AsmString = asmstr;
4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  dag OperandList = ops;
4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def PHI : PseudoInstV8<"PHI", (ops variable_ops)>;
4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def ADJCALLSTACKDOWN : PseudoInstV8<"!ADJCALLSTACKDOWN $amt",
4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                    (ops i32imm:$amt)>;
4503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def ADJCALLSTACKUP : PseudoInstV8<"!ADJCALLSTACKUP $amt",
4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                  (ops i32imm:$amt)>;
4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)//def IMPLICIT_USE : PseudoInstV8<"!IMPLICIT_USE",(ops variable_ops)>;
4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def IMPLICIT_DEF : PseudoInstV8<"!IMPLICIT_DEF $dst", 
4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                (ops IntRegs:$dst)>;
5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def FpMOVD : PseudoInstV8<"!FpMOVD", (ops)>; // pseudo 64-bit double move
5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Section A.3 - Synthetic Instructions, p. 85
5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// special cases of JMPL:
5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)let isReturn = 1, isTerminator = 1, hasDelaySlot = 1 in {
5503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let rd = I7.Num, rs1 = G0.Num, simm13 = 8 in
5603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    def RET : F3_2<2, 0b111000,
5703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
5803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   "ret $b, $c, $dst">;
5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let rd = O7.Num, rs1 = G0.Num, simm13 = 8 in
6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    def RETL: F3_2<2, 0b111000, (ops),
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "retl">;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
63a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// CMP is a special case of SUBCC where destination is ignored, by setting it to
64a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// %g0 (hardwired zero).
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// FIXME: should keep track of the fact that it defs the integer condition codes
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)let rd = 0 in
6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  def CMPri: F3_2<2, 0b010100,
6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                  (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                  "cmp $b, $c, $dst">;
7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
7103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Section B.1 - Load Integer Instructions, p. 90
7203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def LDSB: F3_2<3, 0b001001,
7303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)               (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
7403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)               "ldsb [$b+$c], $dst">;
7503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def LDSH: F3_2<3, 0b001010,
7603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)               (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)               "ldsh [$b+$c], $dst">;
7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def LDUB: F3_2<3, 0b000001,
7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)               (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
8003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)               "ldub [$b+$c], $dst">;
8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def LDUH: F3_2<3, 0b000010,
8203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)               (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)               "lduh [$b+$c], $dst">;
8403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def LD  : F3_2<3, 0b000000,
8503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)               (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
8603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)               "ld [$b+$c], $dst">;
8703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def LDD : F3_2<3, 0b000011,
8803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)               (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
8903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)               "ldd [$b+$c], $dst">;
9003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
9103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Section B.2 - Load Floating-point Instructions, p. 92
9203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def LDFrr  : F3_1<3, 0b100000,
9303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                  (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
9403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                  "ld [$b+$c], $dst">;
9503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def LDFri  : F3_2<3, 0b100000,
9603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                  (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
9703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                  "ld [$b+$c], $dst">;
9803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def LDDFrr : F3_1<3, 0b100011,
9903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                  (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
10003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                  "ldd [$b+$c], $dst">;
10103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def LDDFri : F3_2<3, 0b100011,
10203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                  (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
10303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                  "ldd [$b+$c], $dst">;
10403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def LDFSRrr: F3_1<3, 0b100001,
10503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                  (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
10603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                  "ld [$b+$c], $dst">;
10703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def LDFSRri: F3_2<3, 0b100001,
10803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                  (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
10903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                  "ld [$b+$c], $dst">;
11003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
11103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Section B.4 - Store Integer Instructions, p. 95
11203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def STB : F3_2<3, 0b000101,
11303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)               (ops IntRegs:$base, IntRegs:$offset, i32imm:$src),
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               "stb $src, [$base+$offset]">;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def STH : F3_2<3, 0b000110,
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               (ops IntRegs:$base, IntRegs:$offset, i32imm:$src),
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               "sth $src, [$base+$offset]">;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def ST  : F3_2<3, 0b000100,
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               (ops IntRegs:$base, IntRegs:$offset, i32imm:$src),
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               "st $src, [$base+$offset]">;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def STD : F3_2<3, 0b000111,
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               (ops IntRegs:$base, IntRegs:$offset, i32imm:$src),
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               "std $src, [$base+$offset]">;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Section B.5 - Store Floating-point Instructions, p. 97
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def STFrr   : F3_1<3, 0b100100,
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$base, IntRegs:$offset, IntRegs:$src),
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "st $src, [$base+$offset]">;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def STFri   : F3_2<3, 0b100100,
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$base, IntRegs:$offset, i32imm:$src),
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "st $src, [$base+$offset]">;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def STDFrr  : F3_1<3, 0b100111,
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$base, IntRegs:$offset, IntRegs:$src),
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "std  $src, [$base+$offset]">;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def STDFri  : F3_2<3, 0b100111,
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$base, IntRegs:$offset, i32imm:$src),
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "std $src, [$base+$offset]">;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def STFSRrr : F3_1<3, 0b100101,
13903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   (ops IntRegs:$base, IntRegs:$offset, IntRegs:$src),
14003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   "st $src, [$base+$offset]">;
14103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def STFSRri : F3_2<3, 0b100101,
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$base, IntRegs:$offset, i32imm:$src),
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "st $src, [$base+$offset]">;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def STDFQrr : F3_1<3, 0b100110,
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$base, IntRegs:$offset, IntRegs:$src),
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "std $src, [$base+$offset]">;
14703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def STDFQri : F3_2<3, 0b100110,
14803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   (ops IntRegs:$base, IntRegs:$offset, i32imm:$src),
14903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   "std $src, [$base+$offset]">;
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Section B.9 - SETHI Instruction, p. 104
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SETHIi: F2_1<0b100,
15303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                 (ops IntRegs:$dst, i32imm:$src),
15403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                 "sethi $src, $dst">;
15503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Section B.10 - NOP Instruction, p. 105
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (It's a special case of SETHI)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)let rd = 0, imm22 = 0 in
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def NOP : F2_1<0b100, (ops), "nop">;
16003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
16103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Section B.11 - Logical Instructions, p. 106
16203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def ANDrr   : F3_1<2, 0b000001,
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "and $b, $c, $dst">;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def ANDri   : F3_2<2, 0b000001,
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
16703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   "and $b, $c, $dst">;
16803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def ANDCCrr : F3_1<2, 0b010001,
16903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
17003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   "andcc $b, $c, $dst">;
17103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def ANDCCri : F3_2<2, 0b010001,
17203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
17303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   "andcc $b, $c, $dst">;
17403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def ANDNrr  : F3_1<2, 0b000101,
17503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
17603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   "andn $b, $c, $dst">;
17703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def ANDNri  : F3_2<2, 0b000101,
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "andn $b, $c, $dst">;
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def ANDNCCrr: F3_1<2, 0b010101,
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
18203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   "andncc $b, $c, $dst">;
18303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def ANDNCCri: F3_2<2, 0b010101,
18403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
18503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   "andncc $b, $c, $dst">;
18603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def ORrr    : F3_1<2, 0b000010,
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "or $b, $c, $dst">;
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def ORri    : F3_2<2, 0b000010,
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "or $b, $c, $dst">;
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def ORCCrr  : F3_1<2, 0b010010,
19303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
19403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   "orcc $b, $c, $dst">;
19503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def ORCCri  : F3_2<2, 0b010010,
19603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
19703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   "orcc $b, $c, $dst">;
19803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def ORNrr   : F3_1<2, 0b000110,
19903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
20003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   "orn $b, $c, $dst">;
20103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def ORNri   : F3_2<2, 0b000110,
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
203eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                   "orn $b, $c, $dst">;
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def ORNCCrr : F3_1<2, 0b010110,
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
20603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   "orncc $b, $c, $dst">;
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def ORNCCri : F3_2<2, 0b010110,
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "orncc $b, $c, $dst">;
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def XORrr   : F3_1<2, 0b000011,
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "xor $b, $c, $dst">;
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def XORri   : F3_2<2, 0b000011,
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "xor $b, $c, $dst">;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def XORCCrr : F3_1<2, 0b010011,
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
218a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch                   "xorcc $b, $c, $dst">;
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def XORCCri : F3_2<2, 0b010011,
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "xorcc $b, $c, $dst">;
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def XNORrr  : F3_1<2, 0b000111,
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "xnor $b, $c, $dst">;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def XNORri  : F3_2<2, 0b000111,
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "xnor $b, $c, $dst">;
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def XNORCCrr: F3_1<2, 0b010111,
229a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "xnorcc $b, $c, $dst">;
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def XNORCCri: F3_2<2, 0b010111,
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "xnorcc $b, $c, $dst">;
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Section B.12 - Shift Instructions, p. 107
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SLLrr : F3_1<2, 0b100101,
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 "sll $b, $c, $dst">;
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SLLri : F3_2<2, 0b100101,
240a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch                 (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 "sll $b, $c, $dst">;
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SRLrr : F3_1<2, 0b100110, 
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "srl $b, $c, $dst">;
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SRLri : F3_2<2, 0b100110,
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 "srl $b, $c, $dst">;
248a3f7b4e666c476898878fa745f637129375cd889Ben Murdochdef SRArr : F3_1<2, 0b100111, 
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "sra $b, $c, $dst">;
2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def SRAri : F3_2<2, 0b100111,
2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 "sla $b, $c, $dst">;
2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Section B.13 - Add Instructions, p. 108
2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def ADDrr   : F3_1<2, 0b000000, 
2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                  (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                  "add $b, $c, $dst">;
2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def ADDri   : F3_2<2, 0b000000,
2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   "add $b, $c, $dst">;
2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def ADDCCrr : F3_1<2, 0b010000, 
2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   "addcc $b, $c, $dst">;
2655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def ADDCCri : F3_2<2, 0b010000,
2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   "addcc $b, $c, $dst">;
2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def ADDXrr  : F3_1<2, 0b001000, 
2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   "addx $b, $c, $dst">;
27103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def ADDXri  : F3_2<2, 0b001000,
2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   "addx $b, $c, $dst">;
2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def ADDXCCrr: F3_1<2, 0b011000, 
2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   "addxcc $b, $c, $dst">;
2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def ADDXCCri: F3_2<2, 0b011000,
2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   "addxcc $b, $c, $dst">;
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Section B.15 - Subtract Instructions, p. 110
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SUBrr   : F3_1<2, 0b000100, 
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "sub $b, $c, $dst">;
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SUBri   : F3_2<2, 0b000100,
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "sub $b, $c, $dst">;
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SUBCCrr : F3_1<2, 0b010100, 
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "subcc $b, $c, $dst">;
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SUBCCri : F3_2<2, 0b010100,
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                   "subcc $b, $c, $dst">;
294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)def SUBXrr  : F3_1<2, 0b001100, 
295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                   "subx $b, $c, $dst">;
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SUBXri  : F3_2<2, 0b001100,
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "subx $b, $c, $dst">;
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SUBXCCrr: F3_1<2, 0b011100, 
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "subxcc $b, $c, $dst">;
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SUBXCCri: F3_2<2, 0b011100,
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "subxcc $b, $c, $dst">;
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Section B.18 - Multiply Instructions, p. 113
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def UMULrr  : F3_1<2, 0b001010, 
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "umul $b, $c, $dst">;
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def UMULri  : F3_2<2, 0b001010,
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "umul $b, $c, $dst">;
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SMULrr  : F3_1<2, 0b001011, 
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "smul $b, $c, $dst">;
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SMULri  : F3_2<2, 0b001011,
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "smul $b, $c, $dst">;
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def UMULCCrr: F3_1<2, 0b011010, 
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "umulcc $b, $c, $dst">;
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def UMULCCri: F3_2<2, 0b011010,
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "umulcc $b, $c, $dst">;
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SMULCCrr: F3_1<2, 0b011011, 
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "smulcc $b, $c, $dst">;
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SMULCCri: F3_2<2, 0b011011,
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "smulcc $b, $c, $dst">;
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Section B.19 - Divide Instructions, p. 115
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def UDIVrr   : F3_1<2, 0b001110, 
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    "udiv $b, $c, $dst">;
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def UDIVri   : F3_2<2, 0b001110,
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    "udiv $b, $c, $dst">;
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SDIVrr   : F3_1<2, 0b001111,
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    "sdiv $b, $c, $dst">;
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SDIVri   : F3_2<2, 0b001111,
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    "sdiv $b, $c, $dst">;
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def UDIVCCrr : F3_1<2, 0b011110,
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    "udivcc $b, $c, $dst">;
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def UDIVCCri : F3_2<2, 0b011110,
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    "udivcc $b, $c, $dst">;
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SDIVCCrr : F3_1<2, 0b011111,
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    "sdivcc $b, $c, $dst">;
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SDIVCCri : F3_2<2, 0b011111,
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    "sdivcc $b, $c, $dst">;
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Section B.20 - SAVE and RESTORE, p. 117
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SAVErr    : F3_1<2, 0b111100,
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     "save $b, $c, $dst">;
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SAVEri    : F3_2<2, 0b111100,
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     "save $b, $c, $dst">;
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def RESTORErr : F3_1<2, 0b111101,
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     "restore $b, $c, $dst">;
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def RESTOREri : F3_2<2, 0b111101,
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     "restore $b, $c, $dst">;
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Section B.21 - Branch on Integer Condition Codes Instructions, p. 119
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// conditional branch class:
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BranchV8<bits<4> cc, string nm> : F2_2<cc, 0b010, nm> {
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let isBranch = 1;
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let isTerminator = 1;
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let hasDelaySlot = 1;
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)let isBarrier = 1 in
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def BA   : BranchV8<0b1000, "ba">;
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def BN   : BranchV8<0b0000, "bn">;
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def BNE  : BranchV8<0b1001, "bne">;
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def BE   : BranchV8<0b0001, "be">;
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def BG   : BranchV8<0b1010, "bg">;
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def BLE  : BranchV8<0b0010, "ble">;
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def BGE  : BranchV8<0b1011, "bge">;
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def BL   : BranchV8<0b0011, "bl">;
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def BGU  : BranchV8<0b1100, "bgu">;
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def BLEU : BranchV8<0b0100, "bleu">;
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def BCC  : BranchV8<0b1101, "bcc">;
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def BCS  : BranchV8<0b0101, "bcs">;
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Section B.22 - Branch on Floating-point Condition Codes Instructions, p. 121
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// floating-point conditional branch class:
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FPBranchV8<bits<4> cc, string nm> : F2_2<cc, 0b110, nm> {
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let isBranch = 1;
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let isTerminator = 1;
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let hasDelaySlot = 1;
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FBA  : FPBranchV8<0b1000, "fba">;
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FBN  : FPBranchV8<0b0000, "fbn">;
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FBU  : FPBranchV8<0b0111, "fbu">;
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FBG  : FPBranchV8<0b0110, "fbg">;
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FBUG : FPBranchV8<0b0101, "fbug">;
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FBL  : FPBranchV8<0b0100, "fbl">;
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FBUL : FPBranchV8<0b0011, "fbul">;
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FBLG : FPBranchV8<0b0010, "fblg">;
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FBNE : FPBranchV8<0b0001, "fbne">;
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FBE  : FPBranchV8<0b1001, "fbe">;
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FBUE : FPBranchV8<0b1010, "fbue">;
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FBGE : FPBranchV8<0b1011, "fbge">;
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FBUGE: FPBranchV8<0b1100, "fbuge">;
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FBLE : FPBranchV8<0b1101, "fble">;
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FBULE: FPBranchV8<0b1110, "fbule">;
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FBO  : FPBranchV8<0b1111, "fbo">;
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Section B.24 - Call and Link Instruction, p. 125
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is the only Format 1 instruction
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)let Uses = [O0, O1, O2, O3, O4, O5], hasDelaySlot = 1, isCall = 1 in { 
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // pc-relative call:
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Defs = [O0, O1, O2, O3, O4, O5, O7, G1, G2, G3, G4, G5, G6, G7,
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    D0, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15] in
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def CALL : InstV8 {
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bits<30> disp;
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    let op = 1;
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    let Inst{29-0} = disp;
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    let Name = "call";
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // indirect call (O7 is an EXPLICIT def in indirect calls, so it cannot also
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // be an implicit def):
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Defs = [O0, O1, O2, O3, O4, O5, G1, G2, G3, G4, G5, G6, G7,
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    D0, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15] in
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def JMPLrr : F3_1<2, 0b111000,
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    "jmpl $b+$c, $dst">;
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Section B.29 - Write State Register Instructions
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def WRrr : F3_1<2, 0b110000,
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                "wr $b, $c, $dst">;
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def WRri : F3_2<2, 0b110000,
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                (ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                "wr $b, $c, $dst">;
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Convert Integer to Floating-point Instructions, p. 141
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FITOS : F3_3<2, 0b110100, 0b011000100, "fitos">;
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FITOD : F3_3<2, 0b110100, 0b011001000, "fitod">;
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Convert Floating-point to Integer Instructions, p. 142
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FSTOI : F3_3<2, 0b110100, 0b011010001, "fstoi">;
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FDTOI : F3_3<2, 0b110100, 0b011010010, "fdtoi">;
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Convert between Floating-point Formats Instructions, p. 143
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FSTOD : F3_3<2, 0b110100, 0b011001001, "fstod">;
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FDTOS : F3_3<2, 0b110100, 0b011000110, "fdtos">;
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Floating-point Move Instructions, p. 144
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FMOVS : F3_3<2, 0b110100, 0b000000001, "fmovs">;
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FNEGS : F3_3<2, 0b110100, 0b000000101, "fnegs">;
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FABSS : F3_3<2, 0b110100, 0b000001001, "fabss">;
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Floating-point Add and Subtract Instructions, p. 146
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FADDS  : F3_3<2, 0b110100, 0b001000001, "fadds">;
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FADDD  : F3_3<2, 0b110100, 0b001000010, "faddd">;
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FSUBS  : F3_3<2, 0b110100, 0b001000101, "fsubs">;
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FSUBD  : F3_3<2, 0b110100, 0b001000110, "fsubd">;
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Floating-point Multiply and Divide Instructions, p. 147
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FMULS  : F3_3<2, 0b110100, 0b001001001, "fmuls">;
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FMULD  : F3_3<2, 0b110100, 0b001001010, "fmuld">;
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FSMULD : F3_3<2, 0b110100, 0b001101001, "fsmuld">;
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FDIVS  : F3_3<2, 0b110100, 0b001001101, "fdivs">;
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FDIVD  : F3_3<2, 0b110100, 0b001001110, "fdivd">;
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Floating-point Compare Instructions, p. 148
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note: the 2nd template arg is different for these guys.
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note 2: the result of a FCMP is not available until the 2nd cycle
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// after the instr is retired, but there is no interlock. This behavior
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is modelled as a delay slot.
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)let hasDelaySlot = 1 in {
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def FCMPS  : F3_3<2, 0b110101, 0b001010001, "fcmps">;
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def FCMPD  : F3_3<2, 0b110101, 0b001010010, "fcmpd">;
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def FCMPES : F3_3<2, 0b110101, 0b001010101, "fcmpes">;
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def FCMPED : F3_3<2, 0b110101, 0b001010110, "fcmped">;
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)