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)