SystemZInstrInfo.td revision 21ddf779bfceb2ba98f976bcd36fbf017ed54c52
1bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell//===- SystemZInstrInfo.td - SystemZ Instruction defs ---------*- tblgen-*-===// 2bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell// 3bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell// The LLVM Compiler Infrastructure 4bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell// 54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source 64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details. 7bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell// 8bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell//===----------------------------------------------------------------------===// 9bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell// 10bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell// This file describes the SystemZ instructions in TableGen format. 11bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell// 12bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell//===----------------------------------------------------------------------===// 13bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell 14bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell//===----------------------------------------------------------------------===// 15bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell// SystemZ Instruction Predicate Definitions. 16bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswelldef IsZ10 : Predicate<"Subtarget.isZ10()">; 17bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell 185520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerinclude "SystemZInstrFormats.td" 199a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman 20bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell//===----------------------------------------------------------------------===// 21bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell// Type Constraints. 22508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson//===----------------------------------------------------------------------===// 235520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerclass SDTCisI8<int OpNum> : SDTCisVT<OpNum, i8>; 24c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattnerclass SDTCisI16<int OpNum> : SDTCisVT<OpNum, i16>; 2503dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerclass SDTCisI32<int OpNum> : SDTCisVT<OpNum, i32>; 26c25e7581b9b8088910da31702d4ca21c4734c6d7Torok Edwinclass SDTCisI64<int OpNum> : SDTCisVT<OpNum, i64>; 27bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell 28bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell//===----------------------------------------------------------------------===// 29bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell// Type Profiles. 3097af751deb9b26fd42fbcee082da9ccc4ded5b45Jeff Cohen//===----------------------------------------------------------------------===// 31bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswelldef SDT_SystemZCall : SDTypeProfile<0, -1, [SDTCisPtrTy<0>]>; 32bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswelldef SDT_SystemZCallSeqStart : SDCallSeqStart<[SDTCisI64<0>]>; 3303dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerdef SDT_SystemZCallSeqEnd : SDCallSeqEnd<[SDTCisI64<0>, SDTCisI64<1>]>; 3403dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerdef SDT_CmpTest : SDTypeProfile<0, 2, [SDTCisSameAs<0, 1>]>; 3503dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerdef SDT_BrCond : SDTypeProfile<0, 2, 3603dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [SDTCisVT<0, OtherVT>, 3703dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner SDTCisI8<1>]>; 3803dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerdef SDT_SelectCC : SDTypeProfile<1, 3, 3903dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [SDTCisSameAs<0, 1>, SDTCisSameAs<1, 2>, 4003dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner SDTCisI8<3>]>; 4103dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerdef SDT_Address : SDTypeProfile<1, 1, 4203dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [SDTCisSameAs<0, 1>, SDTCisPtrTy<0>]>; 4303dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner 4403dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner//===----------------------------------------------------------------------===// 4503dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner// SystemZ Specific Node Definitions. 4603dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner//===----------------------------------------------------------------------===// 4703dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerdef SystemZretflag : SDNode<"SystemZISD::RET_FLAG", SDTNone, 4803dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [SDNPHasChain, SDNPOptInFlag]>; 4903dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerdef SystemZcall : SDNode<"SystemZISD::CALL", SDT_SystemZCall, 5003dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [SDNPHasChain, SDNPOutFlag, SDNPOptInFlag]>; 5103dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerdef SystemZcallseq_start : 5203dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner SDNode<"ISD::CALLSEQ_START", SDT_SystemZCallSeqStart, 5303dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [SDNPHasChain, SDNPOutFlag]>; 5403dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerdef SystemZcallseq_end : 5503dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner SDNode<"ISD::CALLSEQ_END", SDT_SystemZCallSeqEnd, 5603dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [SDNPHasChain, SDNPOptInFlag, SDNPOutFlag]>; 5703dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerdef SystemZcmp : SDNode<"SystemZISD::CMP", SDT_CmpTest, [SDNPOutFlag]>; 5803dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerdef SystemZucmp : SDNode<"SystemZISD::UCMP", SDT_CmpTest, [SDNPOutFlag]>; 5903dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerdef SystemZbrcond : SDNode<"SystemZISD::BRCOND", SDT_BrCond, 6003dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [SDNPHasChain, SDNPInFlag]>; 61f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattnerdef SystemZselect : SDNode<"SystemZISD::SELECT", SDT_SelectCC, [SDNPInFlag]>; 62f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattnerdef SystemZpcrelwrapper : SDNode<"SystemZISD::PCRelativeWrapper", SDT_Address, []>; 6303dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner 6403dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner 6503dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerinclude "SystemZOperands.td" 6603dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner 6703dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner//===----------------------------------------------------------------------===// 6803dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner// Instruction list.. 6903dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner 7003dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerdef ADJCALLSTACKDOWN : Pseudo<(outs), (ins i64imm:$amt), 71de2d74b213844b17eb5327fba27f21e699d3af66Gabor Greif "#ADJCALLSTACKDOWN", 72785c6af9797fcf551feef70f2ecb5cd075b6e3c4Gabor Greif [(SystemZcallseq_start timm:$amt)]>; 73de2d74b213844b17eb5327fba27f21e699d3af66Gabor Greifdef ADJCALLSTACKUP : Pseudo<(outs), (ins i64imm:$amt1, i64imm:$amt2), 7403dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner "#ADJCALLSTACKUP", 7503dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [(SystemZcallseq_end timm:$amt1, timm:$amt2)]>; 7603dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner 7703dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerlet usesCustomDAGSchedInserter = 1 in { 7803dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner def Select32 : Pseudo<(outs GR32:$dst), (ins GR32:$src1, GR32:$src2, i8imm:$cc), 79b1919e2f08ecb37140af676fd2916f8d5ed7df3dChris Lattner "# Select32 PSEUDO", 8003dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [(set GR32:$dst, 81ca5183d445954a9b2a570d6bbba1bc2b00ad6442Jeff Cohen (SystemZselect GR32:$src1, GR32:$src2, imm:$cc))]>; 82777d2306b36816a53bc1ae1244c0dc7d998ae691Duncan Sands def Select64 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, GR64:$src2, i8imm:$cc), 8303dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner "# Select64 PSEUDO", 8403dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [(set GR64:$dst, 8503dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner (SystemZselect GR64:$src1, GR64:$src2, imm:$cc))]>; 8603dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner} 8703dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner 8803dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner 8903dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner//===----------------------------------------------------------------------===// 9003dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner// Control Flow Instructions... 9103dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner// 9203dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner 9367e3566d8f6875e9c92d224f493023408a66227eNick Lewycky// FIXME: Provide proper encoding! 9403dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerlet isReturn = 1, isTerminator = 1, isBarrier = 1, hasCtrlDep = 1 in { 9503dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner def RET : Pseudo<(outs), (ins), "br\t%r14", [(SystemZretflag)]>; 9603dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner} 97508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson 98e922c0201916e0b980ab3cfe91e1413e68d55647Owen Andersonlet isBranch = 1, isTerminator = 1 in { 9903dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner let isBarrier = 1 in { 10003dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner def JMP : Pseudo<(outs), (ins brtarget:$dst), "j\t{$dst}", [(br bb:$dst)]>; 10103dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner 10203dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner let isIndirectBranch = 1 in 10303dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner def JMPr : Pseudo<(outs), (ins GR64:$dst), "br\t{$dst}", [(brind GR64:$dst)]>; 10403dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner } 10503dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner 10603dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner let Uses = [PSW] in { 10703dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner def JO : Pseudo<(outs), (ins brtarget:$dst), 10803dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner "jo\t$dst", 10903dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [(SystemZbrcond bb:$dst, SYSTEMZ_COND_O)]>; 11003dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner def JH : Pseudo<(outs), (ins brtarget:$dst), 11103dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner "jh\t$dst", 11203dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [(SystemZbrcond bb:$dst, SYSTEMZ_COND_H)]>; 11303dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner def JNLE: Pseudo<(outs), (ins brtarget:$dst), 11403dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner "jnle\t$dst", 11503dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [(SystemZbrcond bb:$dst, SYSTEMZ_COND_NLE)]>; 116eed707b1e6097aac2bb6b3d47271f6300ace7f2eOwen Anderson def JL : Pseudo<(outs), (ins brtarget:$dst), 11703dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner "jl\t$dst", 11803dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [(SystemZbrcond bb:$dst, SYSTEMZ_COND_L)]>; 11903dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner def JNHE: Pseudo<(outs), (ins brtarget:$dst), 12003dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner "jnhe\t$dst", 12103dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [(SystemZbrcond bb:$dst, SYSTEMZ_COND_NHE)]>; 12203dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner def JLH : Pseudo<(outs), (ins brtarget:$dst), 12303dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner "jlh\t$dst", 12403dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [(SystemZbrcond bb:$dst, SYSTEMZ_COND_LH)]>; 125f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner def JNE : Pseudo<(outs), (ins brtarget:$dst), 12603dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner "jne\t$dst", 127e922c0201916e0b980ab3cfe91e1413e68d55647Owen Anderson [(SystemZbrcond bb:$dst, SYSTEMZ_COND_NE)]>; 12803dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner def JE : Pseudo<(outs), (ins brtarget:$dst), 12903dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner "je\t$dst", 130268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner [(SystemZbrcond bb:$dst, SYSTEMZ_COND_E)]>; 13103dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner def JNLH: Pseudo<(outs), (ins brtarget:$dst), 13203dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner "jnlh\t$dst", 133268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner [(SystemZbrcond bb:$dst, SYSTEMZ_COND_NLH)]>; 134de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman def JHE : Pseudo<(outs), (ins brtarget:$dst), 135268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner "jhe\t$dst", 136268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner [(SystemZbrcond bb:$dst, SYSTEMZ_COND_HE)]>; 137268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner def JNL : Pseudo<(outs), (ins brtarget:$dst), 138268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner "jnl\t$dst", 139268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner [(SystemZbrcond bb:$dst, SYSTEMZ_COND_NL)]>; 140268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner def JLE : Pseudo<(outs), (ins brtarget:$dst), 141268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner "jle\t$dst", 142268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner [(SystemZbrcond bb:$dst, SYSTEMZ_COND_LE)]>; 143268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner def JNH : Pseudo<(outs), (ins brtarget:$dst), 144de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman "jnh\t$dst", 14503dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [(SystemZbrcond bb:$dst, SYSTEMZ_COND_NH)]>; 146268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner def JNO : Pseudo<(outs), (ins brtarget:$dst), 147268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner "jno\t$dst", 148268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner [(SystemZbrcond bb:$dst, SYSTEMZ_COND_NO)]>; 149268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner } // Uses = [PSW] 150268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner} // isBranch = 1 151de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman 152268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner//===----------------------------------------------------------------------===// 153268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner// Call Instructions... 154268e7d7a9446bb89b80472cdb7b9803f16c0191eChris Lattner// 155de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman 156de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohmanlet isCall = 1 in 157de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman // All calls clobber the non-callee saved registers. Uses for argument 158de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman // registers are added manually. 159de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman let Defs = [R0D, R1D, R2D, R3D, R4D, R5D, R14D, 160de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman F0L, F1L, F2L, F3L, F4L, F5L, F6L, F7L] in { 161de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman def CALLi : Pseudo<(outs), (ins imm_pcrel:$dst, variable_ops), 162de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman "brasl\t%r14, $dst", [(SystemZcall imm:$dst)]>; 163de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman def CALLr : Pseudo<(outs), (ins ADDR64:$dst, variable_ops), 164de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman "basr\t%r14, $dst", [(SystemZcall ADDR64:$dst)]>; 165de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman } 166de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman 167de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman//===----------------------------------------------------------------------===// 168de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman// Miscellaneous Instructions. 169de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman// 170de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman 171de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohmanlet isReMaterializable = 1 in 172de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman// FIXME: Provide imm12 variant 173de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman// FIXME: Address should be halfword aligned... 174de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohmandef LA64r : Pseudo<(outs GR64:$dst), (ins laaddr:$src), 175de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman "lay\t{$dst, $src}", 176de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman [(set GR64:$dst, laaddr:$src)]>; 177de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohmandef LA64rm : Pseudo<(outs GR64:$dst), (ins i64imm:$src), 178de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman "larl\t{$dst, $src}", 179de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman [(set GR64:$dst, 180de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman (SystemZpcrelwrapper tglobaladdr:$src))]>; 181de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman 182de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohmanlet neverHasSideEffects = 1 in 183de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohmandef NOP : Pseudo<(outs), (ins), "# no-op", []>; 184de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman 185de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman//===----------------------------------------------------------------------===// 186de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman// Move Instructions 187de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman 188de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman// FIXME: Provide proper encoding! 189de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohmanlet neverHasSideEffects = 1 in { 190de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohmandef MOV32rr : Pseudo<(outs GR32:$dst), (ins GR32:$src), 191de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman "lr\t{$dst, $src}", 192de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman []>; 193de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohmandef MOV64rr : Pseudo<(outs GR64:$dst), (ins GR64:$src), 194de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman "lgr\t{$dst, $src}", 195de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman []>; 196de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohmandef MOV128rr : Pseudo<(outs GR128:$dst), (ins GR128:$src), 197de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman "# MOV128 PSEUDO!\n" 198de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman "\tlgr\t${dst:subreg_odd}, ${src:subreg_odd}\n" 199de0e587e63f71afb2ac53c9880c262089fe798bbDan Gohman "\tlgr\t${dst:subreg_even}, ${src:subreg_even}", 20003dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner []>; 20103dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerdef MOV64rrP : Pseudo<(outs GR64P:$dst), (ins GR64P:$src), 2021afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "# MOV64P PSEUDO!\n" 2031afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "\tlr\t${dst:subreg_odd}, ${src:subreg_odd}\n" 2041afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "\tlr\t${dst:subreg_even}, ${src:subreg_even}", 205e922c0201916e0b980ab3cfe91e1413e68d55647Owen Anderson []>; 2061afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner} 2071afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner 2081afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOVSX64rr32 : Pseudo<(outs GR64:$dst), (ins GR32:$src), 2091afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "lgfr\t{$dst, $src}", 2101afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(set GR64:$dst, (sext GR32:$src))]>; 2111afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOVZX64rr32 : Pseudo<(outs GR64:$dst), (ins GR32:$src), 2121afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "llgfr\t{$dst, $src}", 2131afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(set GR64:$dst, (zext GR32:$src))]>; 2141afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner 2151afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner// FIXME: Provide proper encoding! 2161afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerlet isReMaterializable = 1, isAsCheapAsAMove = 1 in { 2171afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV32ri16 : Pseudo<(outs GR32:$dst), (ins s16imm:$src), 2181afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "lhi\t{$dst, $src}", 2191afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(set GR32:$dst, immSExt16:$src)]>; 2201afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV64ri16 : Pseudo<(outs GR64:$dst), (ins s16imm64:$src), 2211afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "lghi\t{$dst, $src}", 2221afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(set GR64:$dst, immSExt16:$src)]>; 2231afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner 2241afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV64rill16 : Pseudo<(outs GR64:$dst), (ins i64imm:$src), 2251afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "llill\t{$dst, $src}", 2261afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(set GR64:$dst, i64ll16:$src)]>; 2271afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV64rilh16 : Pseudo<(outs GR64:$dst), (ins i64imm:$src), 2281afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "llilh\t{$dst, $src}", 2291afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(set GR64:$dst, i64lh16:$src)]>; 2301afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV64rihl16 : Pseudo<(outs GR64:$dst), (ins i64imm:$src), 231debcb01b0f0a15f568ca69e8f288fade4bfc7297Owen Anderson "llihl\t{$dst, $src}", 2321d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson [(set GR64:$dst, i64hl16:$src)]>; 2331afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV64rihh16 : Pseudo<(outs GR64:$dst), (ins i64imm:$src), 234508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson "llihh\t{$dst, $src}", 2351afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(set GR64:$dst, i64hh16:$src)]>; 2361afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner 2371afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV64ri32 : Pseudo<(outs GR64:$dst), (ins s32imm64:$src), 238baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson "lgfi\t{$dst, $src}", 2391afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(set GR64:$dst, immSExt32:$src)]>; 2401afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV64rilo32 : Pseudo<(outs GR64:$dst), (ins i64imm:$src), 2411afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "llilf\t{$dst, $src}", 2421afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(set GR64:$dst, i64lo32:$src)]>; 2431afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV64rihi32 : Pseudo<(outs GR64:$dst), (ins i64imm:$src), 2441afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "llihf\t{$dst, $src}", 245debcb01b0f0a15f568ca69e8f288fade4bfc7297Owen Anderson [(set GR64:$dst, i64hi32:$src)]>; 2461d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson} 2471afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner 248baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Andersonlet canFoldAsLoad = 1, isReMaterializable = 1, mayHaveSideEffects = 1 in { 2491afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV32rm : Pseudo<(outs GR32:$dst), (ins rriaddr12:$src), 2501afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "l\t{$dst, $src}", 2511afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(set GR32:$dst, (load rriaddr12:$src))]>; 2521afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV32rmy : Pseudo<(outs GR32:$dst), (ins rriaddr:$src), 2531afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "ly\t{$dst, $src}", 2541afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(set GR32:$dst, (load rriaddr:$src))]>; 2551afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV64rm : Pseudo<(outs GR64:$dst), (ins rriaddr:$src), 2561afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "lg\t{$dst, $src}", 2571afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(set GR64:$dst, (load rriaddr:$src))]>; 2581afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV64Prm : Pseudo<(outs GR64P:$dst), (ins rriaddr12:$src), 2591afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "# MOV64P PSEUDO!\n" 2601afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "\tl\t${dst:subreg_odd}, $src\n" 2611afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "\tl\t${dst:subreg_even}, 4+$src", 262a7235ea7245028a0723e8ab7fd011386b3900777Owen Anderson [(set GR64P:$dst, (load rriaddr12:$src))]>; 2631afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV64Prmy : Pseudo<(outs GR64P:$dst), (ins rriaddr:$src), 2641afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "# MOV64P PSEUDO!\n" 2651afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "\tly\t${dst:subreg_odd}, $src\n" 2661afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "\tly\t${dst:subreg_even}, 4+$src", 2671afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(set GR64P:$dst, (load rriaddr:$src))]>; 2681afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV128rm : Pseudo<(outs GR128:$dst), (ins rriaddr:$src), 2691afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "# MOV128 PSEUDO!\n" 2701afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "\tlg\t${dst:subreg_odd}, $src\n" 2711afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "\tlg\t${dst:subreg_even}, 8+$src", 2721afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(set GR128:$dst, (load rriaddr:$src))]>; 2731afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner} 2741afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner 275baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Andersondef MOV32mr : Pseudo<(outs), (ins rriaddr12:$dst, GR32:$src), 2761afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "st\t{$src, $dst}", 2771afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(store GR32:$src, rriaddr12:$dst)]>; 278baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Andersondef MOV32mry : Pseudo<(outs), (ins rriaddr:$dst, GR32:$src), 279eed707b1e6097aac2bb6b3d47271f6300ace7f2eOwen Anderson "sty\t{$src, $dst}", 2801afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(store GR32:$src, rriaddr:$dst)]>; 2811afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV64mr : Pseudo<(outs), (ins rriaddr:$dst, GR64:$src), 2821afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "stg\t{$src, $dst}", 283baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson [(store GR64:$src, rriaddr:$dst)]>; 2841afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV64Pmr : Pseudo<(outs), (ins rriaddr12:$dst, GR64P:$src), 2851afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "# MOV64P PSEUDO!\n" 2861afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "\tst\t${src:subreg_odd}, $dst\n" 2871afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "\tst\t${src:subreg_even}, 4+$dst", 2881afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(store GR64P:$src, rriaddr12:$dst)]>; 2891afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV64Pmry : Pseudo<(outs), (ins rriaddr:$dst, GR64P:$src), 2901afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "# MOV64P PSEUDO!\n" 2911afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "\tsty\t${src:subreg_odd}, $dst\n" 2921afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "\tsty\t${src:subreg_even}, 4+$dst", 2931afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(store GR64P:$src, rriaddr:$dst)]>; 2941afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV128mr : Pseudo<(outs), (ins rriaddr:$dst, GR128:$src), 2951afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "# MOV128 PSEUDO!\n" 2961afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "\tstg\t${src:subreg_odd}, $dst\n" 2971afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "\tstg\t${src:subreg_even}, 8+$dst", 2981afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(store GR128:$src, rriaddr:$dst)]>; 2991afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner 3001afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV8mi : Pseudo<(outs), (ins riaddr12:$dst, i32i8imm:$src), 301baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson "mvi\t{$dst, $src}", 302eed707b1e6097aac2bb6b3d47271f6300ace7f2eOwen Anderson [(truncstorei8 (i32 i32immSExt8:$src), riaddr12:$dst)]>; 3031afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV8miy : Pseudo<(outs), (ins riaddr:$dst, i32i8imm:$src), 3041afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "mviy\t{$dst, $src}", 3051afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(truncstorei8 (i32 i32immSExt8:$src), riaddr:$dst)]>; 306baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson 3071afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV16mi : Pseudo<(outs), (ins riaddr12:$dst, s16imm:$src), 3081afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "mvhhi\t{$dst, $src}", 3091afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(truncstorei16 (i32 i32immSExt16:$src), riaddr12:$dst)]>, 3101afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner Requires<[IsZ10]>; 311af7ec975870f92245f1f1484ac80a1e2db6a0afaOwen Andersondef MOV32mi16 : Pseudo<(outs), (ins riaddr12:$dst, s32imm:$src), 3121afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "mvhi\t{$dst, $src}", 3131afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(store (i32 immSExt16:$src), riaddr12:$dst)]>, 3141afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner Requires<[IsZ10]>; 3151afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef MOV64mi16 : Pseudo<(outs), (ins riaddr12:$dst, s32imm64:$src), 3161afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner "mvghi\t{$dst, $src}", 3171afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(store (i64 immSExt16:$src), riaddr12:$dst)]>, 31803dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner Requires<[IsZ10]>; 31903dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner 32003dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner// sexts 32103dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerdef MOVSX32rr8 : Pseudo<(outs GR32:$dst), (ins GR32:$src), 32203dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner "lbr\t{$dst, $src}", 32303dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [(set GR32:$dst, (sext_inreg GR32:$src, i8))]>; 3245520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MOVSX64rr8 : Pseudo<(outs GR64:$dst), (ins GR64:$src), 3255520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "lgbr\t{$dst, $src}", 3265520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR64:$dst, (sext_inreg GR64:$src, i8))]>; 3275520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MOVSX32rr16 : Pseudo<(outs GR32:$dst), (ins GR32:$src), 3285520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "lhr\t{$dst, $src}", 329e922c0201916e0b980ab3cfe91e1413e68d55647Owen Anderson [(set GR32:$dst, (sext_inreg GR32:$src, i16))]>; 330508955156a25a9abc470a29e1760aa176d341cf9Owen Andersondef MOVSX64rr16 : Pseudo<(outs GR64:$dst), (ins GR64:$src), 3315520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "lghr\t{$dst, $src}", 3325520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR64:$dst, (sext_inreg GR64:$src, i16))]>; 3339e9a0d5fc26878e51a58a8b57900fcbf952c2691Owen Anderson 3345520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner// extloads 3355520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MOVSX32rm8 : Pseudo<(outs GR32:$dst), (ins rriaddr:$src), 3365520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "lb\t{$dst, $src}", 3375520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR32:$dst, (sextloadi32i8 rriaddr:$src))]>; 3385520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MOVSX32rm16 : Pseudo<(outs GR32:$dst), (ins rriaddr12:$src), 3395520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "lh\t{$dst, $src}", 3405520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR32:$dst, (sextloadi32i16 rriaddr12:$src))]>; 3415520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MOVSX32rm16y : Pseudo<(outs GR32:$dst), (ins rriaddr:$src), 3425520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "lhy\t{$dst, $src}", 3435520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR32:$dst, (sextloadi32i16 rriaddr:$src))]>; 3445520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MOVSX64rm8 : Pseudo<(outs GR64:$dst), (ins rriaddr:$src), 3455520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "lgb\t{$dst, $src}", 3465520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR64:$dst, (sextloadi64i8 rriaddr:$src))]>; 3475520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MOVSX64rm16 : Pseudo<(outs GR64:$dst), (ins rriaddr:$src), 3485520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "lgh\t{$dst, $src}", 3495520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR64:$dst, (sextloadi64i16 rriaddr:$src))]>; 350de2d74b213844b17eb5327fba27f21e699d3af66Gabor Greifdef MOVSX64rm32 : Pseudo<(outs GR64:$dst), (ins rriaddr:$src), 351de2d74b213844b17eb5327fba27f21e699d3af66Gabor Greif "lgf\t{$dst, $src}", 3525520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR64:$dst, (sextloadi64i32 rriaddr:$src))]>; 3535520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner 3545520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MOVZX32rm8 : Pseudo<(outs GR32:$dst), (ins rriaddr:$src), 3555520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "llc\t{$dst, $src}", 356f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner [(set GR32:$dst, (zextloadi32i8 rriaddr:$src))]>; 357f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattnerdef MOVZX32rm16 : Pseudo<(outs GR32:$dst), (ins rriaddr:$src), 358508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson "llh\t{$dst, $src}", 359508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson [(set GR32:$dst, (zextloadi32i16 rriaddr:$src))]>; 360f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattnerdef MOVZX64rm8 : Pseudo<(outs GR64:$dst), (ins rriaddr:$src), 361f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner "llgc\t{$dst, $src}", 362508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson [(set GR64:$dst, (zextloadi64i8 rriaddr:$src))]>; 3635520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MOVZX64rm16 : Pseudo<(outs GR64:$dst), (ins rriaddr:$src), 3645520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "llgh\t{$dst, $src}", 3653dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky [(set GR64:$dst, (zextloadi64i16 rriaddr:$src))]>; 3663dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewyckydef MOVZX64rm32 : Pseudo<(outs GR64:$dst), (ins rriaddr:$src), 3673dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky "llgf\t{$dst, $src}", 3683dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky [(set GR64:$dst, (zextloadi64i32 rriaddr:$src))]>; 369e922c0201916e0b980ab3cfe91e1413e68d55647Owen Anderson 3703dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky// truncstores 3713dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewyckydef MOV32m8r : Pseudo<(outs), (ins rriaddr12:$dst, GR32:$src), 3723dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky "stc\t{$src, $dst}", 3733dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky [(truncstorei8 GR32:$src, rriaddr12:$dst)]>; 3743dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky 3753dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewyckydef MOV32m8ry : Pseudo<(outs), (ins rriaddr:$dst, GR32:$src), 3763dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky "stcy\t{$src, $dst}", 377508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson [(truncstorei8 GR32:$src, rriaddr:$dst)]>; 378508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson 3793dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewyckydef MOV32m16r : Pseudo<(outs), (ins rriaddr12:$dst, GR32:$src), 3803dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky "sth\t{$src, $dst}", 381508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson [(truncstorei16 GR32:$src, rriaddr12:$dst)]>; 3823dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky 3833dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewyckydef MOV32m16ry : Pseudo<(outs), (ins rriaddr:$dst, GR32:$src), 3845520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "sthy\t{$src, $dst}", 3855520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(truncstorei16 GR32:$src, rriaddr:$dst)]>; 3865520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner 3875520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MOV64m8r : Pseudo<(outs), (ins rriaddr12:$dst, GR64:$src), 3885520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "stc\t{$src, $dst}", 3895520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(truncstorei8 GR64:$src, rriaddr12:$dst)]>; 390f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner 391f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattnerdef MOV64m8ry : Pseudo<(outs), (ins rriaddr:$dst, GR64:$src), 392e922c0201916e0b980ab3cfe91e1413e68d55647Owen Anderson "stcy\t{$src, $dst}", 3935520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(truncstorei8 GR64:$src, rriaddr:$dst)]>; 39403dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner 395f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattnerdef MOV64m16r : Pseudo<(outs), (ins rriaddr12:$dst, GR64:$src), 39603dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner "sth\t{$src, $dst}", 397508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson [(truncstorei16 GR64:$src, rriaddr12:$dst)]>; 398508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson 39903dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattnerdef MOV64m16ry : Pseudo<(outs), (ins rriaddr:$dst, GR64:$src), 40003dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner "sthy\t{$src, $dst}", 401baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson [(truncstorei16 GR64:$src, rriaddr:$dst)]>; 40203dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner 4035520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MOV64m32r : Pseudo<(outs), (ins rriaddr12:$dst, GR64:$src), 404f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner "st\t{$src, $dst}", 4055520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(truncstorei32 GR64:$src, rriaddr12:$dst)]>; 4065520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner 4075520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MOV64m32ry : Pseudo<(outs), (ins rriaddr:$dst, GR64:$src), 4085520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "sty\t{$src, $dst}", 409ad58eb34342f70f094008e6d08cb4ed814754e64Chris Lattner [(truncstorei32 GR64:$src, rriaddr:$dst)]>; 4105520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner 4115520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner// multiple regs moves 4125520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner// FIXME: should we use multiple arg nodes? 413c23197a26f34f559ea9797de51e187087c039c42Torok Edwindef MOV32mrm : Pseudo<(outs), (ins riaddr:$dst, GR32:$from, GR32:$to), 414001f7534e0311508cc93831a595785bb177f8a18Chris Lattner "stmy\t{$from, $to, $dst}", 415001f7534e0311508cc93831a595785bb177f8a18Chris Lattner []>; 416001f7534e0311508cc93831a595785bb177f8a18Chris Lattnerdef MOV64mrm : Pseudo<(outs), (ins riaddr:$dst, GR64:$from, GR64:$to), 417001f7534e0311508cc93831a595785bb177f8a18Chris Lattner "stmg\t{$from, $to, $dst}", 418001f7534e0311508cc93831a595785bb177f8a18Chris Lattner []>; 419001f7534e0311508cc93831a595785bb177f8a18Chris Lattnerdef MOV32rmm : Pseudo<(outs GR32:$from, GR32:$to), (ins riaddr:$dst), 4206de29f8d960505421d61c80cdb738e16720b6c0eDan Gohman "lmy\t{$from, $to, $dst}", 42104aa2c3520c049333ca216fb794d700310c4a33dNick Lewycky []>; 42204aa2c3520c049333ca216fb794d700310c4a33dNick Lewyckydef MOV64rmm : Pseudo<(outs GR64:$from, GR64:$to), (ins riaddr:$dst), 423eed707b1e6097aac2bb6b3d47271f6300ace7f2eOwen Anderson "lmg\t{$from, $to, $dst}", 42404aa2c3520c049333ca216fb794d700310c4a33dNick Lewycky []>; 425baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson 42604aa2c3520c049333ca216fb794d700310c4a33dNick Lewyckylet isReMaterializable = 1, isAsCheapAsAMove = 1, isTwoAddress = 1 in { 427001f7534e0311508cc93831a595785bb177f8a18Chris Lattnerdef MOV64Pr0_even : Pseudo<(outs GR64P:$dst), (ins GR64P:$src), 428baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson "lhi\t${dst:subreg_even}, 0", 429001f7534e0311508cc93831a595785bb177f8a18Chris Lattner []>; 430001f7534e0311508cc93831a595785bb177f8a18Chris Lattnerdef MOV128r0_even : Pseudo<(outs GR128:$dst), (ins GR128:$src), 431baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson "lghi\t${dst:subreg_even}, 0", 432001f7534e0311508cc93831a595785bb177f8a18Chris Lattner []>; 43381b06be055e74a3c23a1c8f17ead97f9f76335eeDuncan Sands} 43481b06be055e74a3c23a1c8f17ead97f9f76335eeDuncan Sands 43581b06be055e74a3c23a1c8f17ead97f9f76335eeDuncan Sands//===----------------------------------------------------------------------===// 43681b06be055e74a3c23a1c8f17ead97f9f76335eeDuncan Sands// Arithmetic Instructions 4379a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman 43881b06be055e74a3c23a1c8f17ead97f9f76335eeDuncan Sandslet Defs = [PSW] in { 4396de29f8d960505421d61c80cdb738e16720b6c0eDan Gohmandef NEG32rr : Pseudo<(outs GR32:$dst), (ins GR32:$src), 4409a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman "lcr\t{$dst, $src}", 4419a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman [(set GR32:$dst, (ineg GR32:$src)), 442508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson (implicit PSW)]>; 443baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Andersondef NEG64rr : Pseudo<(outs GR64:$dst), (ins GR64:$src), 4449a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman "lcgr\t{$dst, $src}", 4459a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman [(set GR64:$dst, (ineg GR64:$src)), 4469a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman (implicit PSW)]>; 4479a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohmandef NEG64rr32 : Pseudo<(outs GR64:$dst), (ins GR32:$src), 4489a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman "lcgfr\t{$dst, $src}", 4499a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman [(set GR64:$dst, (ineg (sext GR32:$src))), 4509a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman (implicit PSW)]>; 4519a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman} 4529a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman 4539a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohmanlet isTwoAddress = 1 in { 4549a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman 4559a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohmanlet Defs = [PSW] in { 4569a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman 4579a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohmanlet isCommutable = 1 in { // X = ADD Y, Z == X = ADD Z, Y 458777d2306b36816a53bc1ae1244c0dc7d998ae691Duncan Sands// FIXME: Provide proper encoding! 459777d2306b36816a53bc1ae1244c0dc7d998ae691Duncan Sandsdef ADD32rr : Pseudo<(outs GR32:$dst), (ins GR32:$src1, GR32:$src2), 4609a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman "ar\t{$dst, $src2}", 4619a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman [(set GR32:$dst, (add GR32:$src1, GR32:$src2)), 4629a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman (implicit PSW)]>; 4639a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohmandef ADD64rr : Pseudo<(outs GR64:$dst), (ins GR64:$src1, GR64:$src2), 4649a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman "agr\t{$dst, $src2}", 4659a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman [(set GR64:$dst, (add GR64:$src1, GR64:$src2)), 466a7235ea7245028a0723e8ab7fd011386b3900777Owen Anderson (implicit PSW)]>; 467eed707b1e6097aac2bb6b3d47271f6300ace7f2eOwen Anderson} 4689a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman 469508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson// FIXME: Provide proper encoding! 470baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Andersondef ADD32ri16 : Pseudo<(outs GR32:$dst), (ins GR32:$src1, s16imm:$src2), 4719a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman "ahi\t{$dst, $src2}", 4729a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman [(set GR32:$dst, (add GR32:$src1, immSExt16:$src2)), 4739a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohman (implicit PSW)]>; 4749a38e3e3991ea443e555d8060f91202a786acdd4Dan Gohmandef ADD32ri : Pseudo<(outs GR32:$dst), (ins GR32:$src1, s32imm:$src2), 47581b06be055e74a3c23a1c8f17ead97f9f76335eeDuncan Sands "afi\t{$dst, $src2}", 47681b06be055e74a3c23a1c8f17ead97f9f76335eeDuncan Sands [(set GR32:$dst, (add GR32:$src1, imm:$src2)), 477baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson (implicit PSW)]>; 4785520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef ADD64ri16 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, s16imm64:$src2), 4795520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "aghi\t{$dst, $src2}", 4805520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR64:$dst, (add GR64:$src1, immSExt16:$src2)), 4815520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner (implicit PSW)]>; 4825520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef ADD64ri32 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, s32imm64:$src2), 4835520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "agfi\t{$dst, $src2}", 4845520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR64:$dst, (add GR64:$src1, immSExt32:$src2)), 4855520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner (implicit PSW)]>; 4865520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner 487baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Andersonlet isCommutable = 1 in { // X = AND Y, Z == X = AND Z, Y 4885520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner// FIXME: Provide proper encoding! 4891afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattnerdef AND32rr : Pseudo<(outs GR32:$dst), (ins GR32:$src1, GR32:$src2), 490508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson "nr\t{$dst, $src2}", 4911afab9c1e0ae2d145ce01718aa14065393117e70Chris Lattner [(set GR32:$dst, (and GR32:$src1, GR32:$src2))]>; 492baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Andersondef AND64rr : Pseudo<(outs GR64:$dst), (ins GR64:$src1, GR64:$src2), 4935520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "ngr\t{$dst, $src2}", 494baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson [(set GR64:$dst, (and GR64:$src1, GR64:$src2))]>; 4955520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner} 496baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson 4975520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner// FIXME: Provide proper encoding! 498baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson// FIXME: Compute masked bits properly! 4995520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef AND32rill16 : Pseudo<(outs GR32:$dst), (ins GR32:$src1, i32imm:$src2), 500baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson "nill\t{$dst, $src2}", 5015520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR32:$dst, (and GR32:$src1, i32ll16c:$src2))]>; 502508955156a25a9abc470a29e1760aa176d341cf9Owen Andersondef AND64rill16 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, i64imm:$src2), 50303dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner "nill\t{$dst, $src2}", 50403dd25ca964813c8b9fe14479443b9c21fb92c55Chris Lattner [(set GR64:$dst, (and GR64:$src1, i64ll16c:$src2))]>; 505baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson 5065520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef AND32rilh16 : Pseudo<(outs GR32:$dst), (ins GR32:$src1, i32imm:$src2), 5075520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "nilh\t{$dst, $src2}", 5085520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR32:$dst, (and GR32:$src1, i32lh16c:$src2))]>; 509f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattnerdef AND64rilh16 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, i64imm:$src2), 510f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner "nilh\t{$dst, $src2}", 511f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner [(set GR64:$dst, (and GR64:$src1, i64lh16c:$src2))]>; 512f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner 513f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattnerdef AND64rihl16 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, i64imm:$src2), 514f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner "nihl\t{$dst, $src2}", 515f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner [(set GR64:$dst, (and GR64:$src1, i64hl16c:$src2))]>; 516e922c0201916e0b980ab3cfe91e1413e68d55647Owen Andersondef AND64rihh16 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, i64imm:$src2), 517f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner "nihh\t{$dst, $src2}", 518f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner [(set GR64:$dst, (and GR64:$src1, i64hh16c:$src2))]>; 519f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner 5203dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewyckydef AND32ri : Pseudo<(outs GR32:$dst), (ins GR32:$src1, i32imm:$src2), 521f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner "nilf\t{$dst, $src2}", 522f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner [(set GR32:$dst, (and GR32:$src1, imm:$src2))]>; 523f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattnerdef AND64rilo32 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, i64imm:$src2), 524f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner "nilf\t{$dst, $src2}", 525f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner [(set GR64:$dst, (and GR64:$src1, i64lo32c:$src2))]>; 526f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattnerdef AND64rihi32 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, i64imm:$src2), 5271d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson "nihf\t{$dst, $src2}", 528f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner [(set GR64:$dst, (and GR64:$src1, i64hi32c:$src2))]>; 529f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner 530f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattnerlet isCommutable = 1 in { // X = OR Y, Z == X = OR Z, Y 531baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson// FIXME: Provide proper encoding! 532f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattnerdef OR32rr : Pseudo<(outs GR32:$dst), (ins GR32:$src1, GR32:$src2), 533a7235ea7245028a0723e8ab7fd011386b3900777Owen Anderson "or\t{$dst, $src2}", 534508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson [(set GR32:$dst, (or GR32:$src1, GR32:$src2))]>; 535508955156a25a9abc470a29e1760aa176d341cf9Owen Andersondef OR64rr : Pseudo<(outs GR64:$dst), (ins GR64:$src1, GR64:$src2), 536f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner "ogr\t{$dst, $src2}", 537f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner [(set GR64:$dst, (or GR64:$src1, GR64:$src2))]>; 538f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner} 539f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner 540f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattnerdef OR32ri16 : Pseudo<(outs GR32:$dst), (ins GR32:$src1, i32imm:$src2), 541f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner "oill\t{$dst, $src2}", 542f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner [(set GR32:$dst, (or GR32:$src1, i32ll16:$src2))]>; 543a7235ea7245028a0723e8ab7fd011386b3900777Owen Andersondef OR32ri16h : Pseudo<(outs GR32:$dst), (ins GR32:$src1, i32imm:$src2), 544f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner "oilh\t{$dst, $src2}", 545508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson [(set GR32:$dst, (or GR32:$src1, i32lh16:$src2))]>; 546508955156a25a9abc470a29e1760aa176d341cf9Owen Andersondef OR32ri : Pseudo<(outs GR32:$dst), (ins GR32:$src1, i32imm:$src2), 547f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner "oilf\t{$dst, $src2}", 548f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner [(set GR32:$dst, (or GR32:$src1, imm:$src2))]>; 549f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner 5503dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewyckydef OR64rill16 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, i64imm:$src2), 5513dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky "oill\t{$dst, $src2}", 5521d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson [(set GR64:$dst, (or GR64:$src1, i64ll16:$src2))]>; 5533dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewyckydef OR64rilh16 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, i64imm:$src2), 5543dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky "oilh\t{$dst, $src2}", 5553dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky [(set GR64:$dst, (or GR64:$src1, i64lh16:$src2))]>; 5563dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewyckydef OR64rihl16 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, i64imm:$src2), 557baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson "oihl\t{$dst, $src2}", 5583dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky [(set GR64:$dst, (or GR64:$src1, i64hl16:$src2))]>; 559baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Andersondef OR64rihh16 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, i64imm:$src2), 5603dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky "oihh\t{$dst, $src2}", 5613dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky [(set GR64:$dst, (or GR64:$src1, i64hh16:$src2))]>; 562508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson 563508955156a25a9abc470a29e1760aa176d341cf9Owen Andersondef OR64rilo32 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, i64imm:$src2), 5643dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky "oilf\t{$dst, $src2}", 5653dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky [(set GR64:$dst, (or GR64:$src1, i64lo32:$src2))]>; 5663dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewyckydef OR64rihi32 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, i64imm:$src2), 5673dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky "oihf\t{$dst, $src2}", 5683dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky [(set GR64:$dst, (or GR64:$src1, i64hi32:$src2))]>; 5693dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky 5703dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky// FIXME: Provide proper encoding! 5713dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewyckydef SUB32rr : Pseudo<(outs GR32:$dst), (ins GR32:$src1, GR32:$src2), 5723dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky "sr\t{$dst, $src2}", 5733dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky [(set GR32:$dst, (sub GR32:$src1, GR32:$src2))]>; 574508955156a25a9abc470a29e1760aa176d341cf9Owen Andersondef SUB64rr : Pseudo<(outs GR64:$dst), (ins GR64:$src1, GR64:$src2), 575508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson "sgr\t{$dst, $src2}", 5763dfd7bf5110c47e99fd0fcce96122b90f699ca3aNick Lewycky [(set GR64:$dst, (sub GR64:$src1, GR64:$src2))]>; 577f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner 578f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner 579f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattnerlet isCommutable = 1 in { // X = XOR Y, Z == X = XOR Z, Y 580baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson// FIXME: Provide proper encoding! 581f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattnerdef XOR32rr : Pseudo<(outs GR32:$dst), (ins GR32:$src1, GR32:$src2), 582f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner "xr\t{$dst, $src2}", 583f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner [(set GR32:$dst, (xor GR32:$src1, GR32:$src2))]>; 5845520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef XOR64rr : Pseudo<(outs GR64:$dst), (ins GR64:$src1, GR64:$src2), 5855520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "xgr\t{$dst, $src2}", 5865520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR64:$dst, (xor GR64:$src1, GR64:$src2))]>; 5875520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner} 588508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson 589e922c0201916e0b980ab3cfe91e1413e68d55647Owen Andersondef XOR32ri : Pseudo<(outs GR32:$dst), (ins GR32:$src1, i32imm:$src2), 590a7235ea7245028a0723e8ab7fd011386b3900777Owen Anderson "xilf\t{$dst, $src2}", 5915520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR32:$dst, (xor GR32:$src1, imm:$src2))]>; 5925520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner 5935520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner} // Defs = [PSW] 5945520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner 5955520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerlet isCommutable = 1 in { // X = MUL Y, Z == X = MUL Z, Y 5965520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MUL32rr : Pseudo<(outs GR32:$dst), (ins GR32:$src1, GR32:$src2), 5975520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "msr\t{$dst, $src2}", 5985520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR32:$dst, (mul GR32:$src1, GR32:$src2))]>; 5995520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MUL64rr : Pseudo<(outs GR64:$dst), (ins GR64:$src1, GR64:$src2), 6005520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "msgr\t{$dst, $src2}", 6015520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR64:$dst, (mul GR64:$src1, GR64:$src2))]>; 6025520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner} 6035520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner 6045520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MUL64rrP : Pseudo<(outs GR64P:$dst), (ins GR64P:$src1, GR32:$src2), 605a7235ea7245028a0723e8ab7fd011386b3900777Owen Anderson "mr\t{$dst, $src2}", 6065520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner []>; 6079e9a0d5fc26878e51a58a8b57900fcbf952c2691Owen Andersondef UMUL64rrP : Pseudo<(outs GR64P:$dst), (ins GR64P:$src1, GR32:$src2), 6085520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "mlr\t{$dst, $src2}", 6095520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner []>; 6105520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef UMUL128rrP : Pseudo<(outs GR128:$dst), (ins GR128:$src1, GR64:$src2), 6115520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "mlgr\t{$dst, $src2}", 6125520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner []>; 6135520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner 6145520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MUL32ri16 : Pseudo<(outs GR32:$dst), (ins GR32:$src1, s16imm:$src2), 6155520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "mhi\t{$dst, $src2}", 6165520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR32:$dst, (mul GR32:$src1, i32immSExt16:$src2))]>; 6175520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MUL64ri16 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, s16imm64:$src2), 618a7235ea7245028a0723e8ab7fd011386b3900777Owen Anderson "mghi\t{$dst, $src2}", 6195520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR64:$dst, (mul GR64:$src1, immSExt16:$src2))]>; 6209e9a0d5fc26878e51a58a8b57900fcbf952c2691Owen Anderson 6215520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MUL32ri : Pseudo<(outs GR32:$dst), (ins GR32:$src1, s32imm:$src2), 6225520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "msfi\t{$dst, $src2}", 6239d6565a5b1fbc4286d6ee638d8f47a3171a9ed7eReid Spencer [(set GR32:$dst, (mul GR32:$src1, imm:$src2))]>, 6245520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner Requires<[IsZ10]>; 6255520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MUL64ri32 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, s32imm64:$src2), 6269d6565a5b1fbc4286d6ee638d8f47a3171a9ed7eReid Spencer "msgfi\t{$dst, $src2}", 6275520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR64:$dst, (mul GR64:$src1, i64immSExt32:$src2))]>, 6285520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner Requires<[IsZ10]>; 629a7235ea7245028a0723e8ab7fd011386b3900777Owen Anderson 6305520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MUL32rm : Pseudo<(outs GR32:$dst), (ins GR32:$src1, rriaddr12:$src2), 6319e9a0d5fc26878e51a58a8b57900fcbf952c2691Owen Anderson "ms\t{$dst, $src2}", 6325520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR32:$dst, (mul GR32:$src1, (load rriaddr12:$src2)))]>; 6335520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MUL32rmy : Pseudo<(outs GR32:$dst), (ins GR32:$src1, rriaddr:$src2), 6345520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "msy\t{$dst, $src2}", 6355520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR32:$dst, (mul GR32:$src1, (load rriaddr:$src2)))]>; 6365520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MUL64rm : Pseudo<(outs GR64:$dst), (ins GR64:$src1, rriaddr:$src2), 6375520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "msg\t{$dst, $src2}", 6385520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR64:$dst, (mul GR64:$src1, (load rriaddr:$src2)))]>; 6395520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner 6405520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattnerdef MULSX64rr32 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, GR32:$src2), 6415520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "msgfr\t{$dst, $src2}", 6425520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner [(set GR64:$dst, (mul GR64:$src1, (sext GR32:$src2)))]>; 6435520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner 644bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswelldef SDIVREM32r : Pseudo<(outs GR128:$dst), (ins GR128:$src1, GR32:$src2), 6455520732b24a5a321140dd79af70d321c7ff3dec9Chris Lattner "dsgfr\t{$dst, $src2}", 646bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell []>; 647bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswelldef SDIVREM64r : Pseudo<(outs GR128:$dst), (ins GR128:$src1, GR64:$src2), 648bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell "dsgr\t{$dst, $src2}", 649bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell []>; 650bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell 651fa9b80eb64127b3d9691e18537975635520e51e9Dan Gohmandef UDIVREM32r : Pseudo<(outs GR64P:$dst), (ins GR64P:$src1, GR32:$src2), 652bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell "dlr\t{$dst, $src2}", 6539ab7fb3ba47442d521a5bed09a27a5e8e7a786edDale Johannesen []>; 6549ab7fb3ba47442d521a5bed09a27a5e8e7a786edDale Johannesendef UDIVREM64r : Pseudo<(outs GR128:$dst), (ins GR128:$src1, GR64:$src2), 655e9391fd9b52e93717b365bdd05c471101323a4dfReid Spencer "dlgr\t{$dst, $src2}", 656e9391fd9b52e93717b365bdd05c471101323a4dfReid Spencer []>; 657e9391fd9b52e93717b365bdd05c471101323a4dfReid Spencerlet mayLoad = 1 in { 658e9391fd9b52e93717b365bdd05c471101323a4dfReid Spencerdef SDIVREM32m : Pseudo<(outs GR128:$dst), (ins GR128:$src1, rriaddr:$src2), 659bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell "dsgf\t{$dst, $src2}", 660bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell []>; 661bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswelldef SDIVREM64m : Pseudo<(outs GR128:$dst), (ins GR128:$src1, rriaddr:$src2), 662bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell "dsg\t{$dst, $src2}", 6636f532a988e5c02fcb271fb65e9e7b83f0147d3f2Chris Lattner []>; 664f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar 665c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattnerdef UDIVREM32m : Pseudo<(outs GR64P:$dst), (ins GR64P:$src1, rriaddr:$src2), 666c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner "dl\t{$dst, $src2}", 667c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner []>; 668c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattnerdef UDIVREM64m : Pseudo<(outs GR128:$dst), (ins GR128:$src1, rriaddr:$src2), 669f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar "dlg\t{$dst, $src2}", 670c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner []>; 671c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner} // mayLoad 672f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar} // isTwoAddress = 1 673f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar 674c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner//===----------------------------------------------------------------------===// 675f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar// Shifts 676c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner 677f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbarlet isTwoAddress = 1 in 678c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattnerdef SRL32rri : Pseudo<(outs GR32:$dst), (ins GR32:$src, riaddr32:$amt), 679f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar "srl\t{$src, $amt}", 680c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner [(set GR32:$dst, (srl GR32:$src, riaddr32:$amt))]>; 681f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbardef SRL64rri : Pseudo<(outs GR64:$dst), (ins GR64:$src, riaddr:$amt), 682c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner "srlg\t{$dst, $src, $amt}", 683f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar [(set GR64:$dst, (srl GR64:$src, riaddr:$amt))]>; 684c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner 685f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbarlet isTwoAddress = 1 in 686f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbardef SHL32rri : Pseudo<(outs GR32:$dst), (ins GR32:$src, riaddr32:$amt), 687c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner "sll\t{$src, $amt}", 688f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar [(set GR32:$dst, (shl GR32:$src, riaddr32:$amt))]>; 689bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswelldef SHL64rri : Pseudo<(outs GR64:$dst), (ins GR64:$src, riaddr:$amt), 690bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell "sllg\t{$dst, $src, $amt}", 691bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell [(set GR64:$dst, (shl GR64:$src, riaddr:$amt))]>; 69272d88ae5447a3929c97e88f4c806213847b5d988Chris Lattner 693e922c0201916e0b980ab3cfe91e1413e68d55647Owen Andersonlet Defs = [PSW] in { 694bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswelllet isTwoAddress = 1 in 695bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswelldef SRA32rri : Pseudo<(outs GR32:$dst), (ins GR32:$src, riaddr32:$amt), 696f19f58a9360927f8ef50b9a029e8efb780d3d8a8Chris Lattner "sra\t{$src, $amt}", 697f19f58a9360927f8ef50b9a029e8efb780d3d8a8Chris Lattner [(set GR32:$dst, (sra GR32:$src, riaddr32:$amt)), 698f19f58a9360927f8ef50b9a029e8efb780d3d8a8Chris Lattner (implicit PSW)]>; 69943421b3dd70af5b70e71816521f37502c397cc65Dale Johannesen 700f19f58a9360927f8ef50b9a029e8efb780d3d8a8Chris Lattnerdef SRA64rri : Pseudo<(outs GR64:$dst), (ins GR64:$src, riaddr:$amt), 7011d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson "srag\t{$dst, $src, $amt}", 7026f83c9c6ef0e7f79825a0a8f22941815e4b684c7Owen Anderson [(set GR64:$dst, (sra GR64:$src, riaddr:$amt)), 7031d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson (implicit PSW)]>; 7046f83c9c6ef0e7f79825a0a8f22941815e4b684c7Owen Anderson} // Defs = [PSW] 705c23197a26f34f559ea9797de51e187087c039c42Torok Edwin 70633e456d5f3909e0c7b96e04e5674c25a182da100Gabor Greifdef ROTL32rri : Pseudo<(outs GR32:$dst), (ins GR32:$src, riaddr32:$amt), 707bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell "rll\t{$dst, $src, $amt}", 708bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell [(set GR32:$dst, (rotl GR32:$src, riaddr32:$amt))]>; 709384152444d22d356f7b4090a158da4cbc1f79464Dan Gohmandef ROTL64rri : Pseudo<(outs GR64:$dst), (ins GR64:$src, riaddr:$amt), 710384152444d22d356f7b4090a158da4cbc1f79464Dan Gohman "rllg\t{$dst, $src, $amt}", 711508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson [(set GR64:$dst, (rotl GR64:$src, riaddr:$amt))]>; 712e922c0201916e0b980ab3cfe91e1413e68d55647Owen Anderson 713384152444d22d356f7b4090a158da4cbc1f79464Dan Gohman//===----------------------------------------------------------------------===// 714384152444d22d356f7b4090a158da4cbc1f79464Dan Gohman// Test instructions (like AND but do not produce any result) 715f19f58a9360927f8ef50b9a029e8efb780d3d8a8Chris Lattner 716f19f58a9360927f8ef50b9a029e8efb780d3d8a8Chris Lattner// Integer comparisons 717f19f58a9360927f8ef50b9a029e8efb780d3d8a8Chris Lattnerlet Defs = [PSW] in { 71843421b3dd70af5b70e71816521f37502c397cc65Dale Johannesendef CMP32rr : Pseudo<(outs), (ins GR32:$src1, GR32:$src2), 719f19f58a9360927f8ef50b9a029e8efb780d3d8a8Chris Lattner "cr\t$src1, $src2", 7201d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson [(SystemZcmp GR32:$src1, GR32:$src2), (implicit PSW)]>; 7216f83c9c6ef0e7f79825a0a8f22941815e4b684c7Owen Andersondef CMP64rr : Pseudo<(outs), (ins GR64:$src1, GR64:$src2), 7221d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson "cgr\t$src1, $src2", 7236f83c9c6ef0e7f79825a0a8f22941815e4b684c7Owen Anderson [(SystemZcmp GR64:$src1, GR64:$src2), (implicit PSW)]>; 724c23197a26f34f559ea9797de51e187087c039c42Torok Edwin 72533e456d5f3909e0c7b96e04e5674c25a182da100Gabor Greifdef CMP32ri : Pseudo<(outs), (ins GR32:$src1, s32imm:$src2), 726384152444d22d356f7b4090a158da4cbc1f79464Dan Gohman "cfi\t$src1, $src2", 727384152444d22d356f7b4090a158da4cbc1f79464Dan Gohman [(SystemZcmp GR32:$src1, imm:$src2), (implicit PSW)]>; 728bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswelldef CMP64ri32 : Pseudo<(outs), (ins GR64:$src1, s32imm64:$src2), 729bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell "cgfi\t$src1, $src2", 73043421b3dd70af5b70e71816521f37502c397cc65Dale Johannesen [(SystemZcmp GR64:$src1, i64immSExt32:$src2), 731bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell (implicit PSW)]>; 732f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattner 733f286f6fd93d569befe6e77c94a947e6e04e95685Chris Lattnerdef CMP32rm : Pseudo<(outs), (ins GR32:$src1, rriaddr12:$src2), 7346f532a988e5c02fcb271fb65e9e7b83f0147d3f2Chris Lattner "c\t$src1, $src2", 735e922c0201916e0b980ab3cfe91e1413e68d55647Owen Anderson [(SystemZcmp GR32:$src1, (load rriaddr12:$src2)), 736f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar (implicit PSW)]>; 737c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattnerdef CMP32rmy : Pseudo<(outs), (ins GR32:$src1, rriaddr:$src2), 738bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell "cy\t$src1, $src2", 73972d88ae5447a3929c97e88f4c806213847b5d988Chris Lattner [(SystemZcmp GR32:$src1, (load rriaddr:$src2)), 740bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell (implicit PSW)]>; 7411d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Andersondef CMP64rm : Pseudo<(outs), (ins GR64:$src1, rriaddr:$src2), 7421d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson "cg\t$src1, $src2", 74343421b3dd70af5b70e71816521f37502c397cc65Dale Johannesen [(SystemZcmp GR64:$src1, (load rriaddr:$src2)), 74443421b3dd70af5b70e71816521f37502c397cc65Dale Johannesen (implicit PSW)]>; 74543421b3dd70af5b70e71816521f37502c397cc65Dale Johannesen 74643421b3dd70af5b70e71816521f37502c397cc65Dale Johannesendef UCMP32rr : Pseudo<(outs), (ins GR32:$src1, GR32:$src2), 74743421b3dd70af5b70e71816521f37502c397cc65Dale Johannesen "clr\t$src1, $src2", 7481d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson [(SystemZucmp GR32:$src1, GR32:$src2), (implicit PSW)]>; 7491d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Andersondef UCMP64rr : Pseudo<(outs), (ins GR64:$src1, GR64:$src2), 75043421b3dd70af5b70e71816521f37502c397cc65Dale Johannesen "clgr\t$src1, $src2", 751f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar [(SystemZucmp GR64:$src1, GR64:$src2), (implicit PSW)]>; 752c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner 753f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbardef UCMP32ri : Pseudo<(outs), (ins GR32:$src1, i32imm:$src2), 754508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson "clfi\t$src1, $src2", 755f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar [(SystemZucmp GR32:$src1, imm:$src2), (implicit PSW)]>; 756508955156a25a9abc470a29e1760aa176d341cf9Owen Andersondef UCMP64ri32 : Pseudo<(outs), (ins GR64:$src1, i64i32imm:$src2), 757f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar "clgfi\t$src1, $src2", 758508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson [(SystemZucmp GR64:$src1, i64immZExt32:$src2), 759c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner (implicit PSW)]>; 760c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner 761f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbardef UCMP32rm : Pseudo<(outs), (ins GR32:$src1, rriaddr12:$src2), 762508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson "cl\t$src1, $src2", 763f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar [(SystemZucmp GR32:$src1, (load rriaddr12:$src2)), 764508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson (implicit PSW)]>; 765f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbardef UCMP32rmy : Pseudo<(outs), (ins GR32:$src1, rriaddr:$src2), 766508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson "cly\t$src1, $src2", 767f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar [(SystemZucmp GR32:$src1, (load rriaddr:$src2)), 768508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson (implicit PSW)]>; 769c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattnerdef UCMP64rm : Pseudo<(outs), (ins GR64:$src1, rriaddr:$src2), 770c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner "clg\t$src1, $src2", 771f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar [(SystemZucmp GR64:$src1, (load rriaddr:$src2)), 772508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson (implicit PSW)]>; 773c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner 774c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattnerdef CMPSX64rr32 : Pseudo<(outs), (ins GR64:$src1, GR32:$src2), 775f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar "cgfr\t$src1, $src2", 776508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson [(SystemZucmp GR64:$src1, (sext GR32:$src2)), 777f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar (implicit PSW)]>; 778508955156a25a9abc470a29e1760aa176d341cf9Owen Andersondef UCMPZX64rr32 : Pseudo<(outs), (ins GR64:$src1, GR32:$src2), 779c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner "clgfr\t$src1, $src2", 780c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner [(SystemZucmp GR64:$src1, (zext GR32:$src2)), 781f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar (implicit PSW)]>; 782508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson 783f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbardef CMPSX64rm32 : Pseudo<(outs), (ins GR64:$src1, rriaddr:$src2), 784508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson "cgf\t$src1, $src2", 785f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar [(SystemZucmp GR64:$src1, (sextloadi64i32 rriaddr:$src2)), 786f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar (implicit PSW)]>; 787c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattnerdef UCMPZX64rm32 : Pseudo<(outs), (ins GR64:$src1, rriaddr:$src2), 788508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson "clgf\t$src1, $src2", 789c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner [(SystemZucmp GR64:$src1, (zextloadi64i32 rriaddr:$src2)), 790a7235ea7245028a0723e8ab7fd011386b3900777Owen Anderson (implicit PSW)]>; 791c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner 792c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner// FIXME: Add other crazy ucmp forms 793c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner 794f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar} // Defs = [PSW] 795508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson 796f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar//===----------------------------------------------------------------------===// 797508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson// Non-Instruction Patterns. 798f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar//===----------------------------------------------------------------------===// 799508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson 800f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar// ConstPools, JumpTables 801508955156a25a9abc470a29e1760aa176d341cf9Owen Andersondef : Pat<(SystemZpcrelwrapper tjumptable:$src), (LA64rm tjumptable:$src)>; 802f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbardef : Pat<(SystemZpcrelwrapper tconstpool:$src), (LA64rm tconstpool:$src)>; 803508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson 804c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner// anyext 805c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattnerdef : Pat<(i64 (anyext GR32:$src)), 806f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar (INSERT_SUBREG (i64 (IMPLICIT_DEF)), GR32:$src, subreg_32bit)>; 807508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson 808f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar// calls 809508955156a25a9abc470a29e1760aa176d341cf9Owen Andersondef : Pat<(SystemZcall (i64 tglobaladdr:$dst)), (CALLi tglobaladdr:$dst)>; 810c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattnerdef : Pat<(SystemZcall (i64 texternalsym:$dst)), (CALLi texternalsym:$dst)>; 811c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner 812c5f6a1f9d61d74017d90e149728cb3d283e0a0e0Chris Lattner//===----------------------------------------------------------------------===// 813bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell// Peepholes. 814b83eb6447ba155342598f0fabe1f08f5baa9164aReid Spencer//===----------------------------------------------------------------------===// 815f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar 816eed707b1e6097aac2bb6b3d47271f6300ace7f2eOwen Anderson// FIXME: use add/sub tricks with 32678/-32768 817f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar 818eed707b1e6097aac2bb6b3d47271f6300ace7f2eOwen Anderson// Arbitrary immediate support. 819f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbardef : Pat<(i32 imm:$src), 820eed707b1e6097aac2bb6b3d47271f6300ace7f2eOwen Anderson (EXTRACT_SUBREG (MOV64ri32 (i64 imm:$src)), subreg_32bit)>; 821f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar 822eed707b1e6097aac2bb6b3d47271f6300ace7f2eOwen Anderson// Implement in terms of LLIHF/OILF. 823bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswelldef : Pat<(i64 imm:$imm), 82472d88ae5447a3929c97e88f4c806213847b5d988Chris Lattner (OR64rilo32 (MOV64rihi32 (HI32 imm:$imm)), (LO32 imm:$imm))>; 825bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell 8261d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson// trunc patterns 8271d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Andersondef : Pat<(i32 (trunc GR64:$src)), 8289ab7fb3ba47442d521a5bed09a27a5e8e7a786edDale Johannesen (EXTRACT_SUBREG GR64:$src, subreg_32bit)>; 8291d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson 83043421b3dd70af5b70e71816521f37502c397cc65Dale Johannesen// sext_inreg patterns 83143421b3dd70af5b70e71816521f37502c397cc65Dale Johannesendef : Pat<(sext_inreg GR64:$src, i32), 832bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell (MOVSX64rr32 (EXTRACT_SUBREG GR64:$src, subreg_32bit))>; 8331d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson 83443421b3dd70af5b70e71816521f37502c397cc65Dale Johannesen// extload patterns 83543421b3dd70af5b70e71816521f37502c397cc65Dale Johannesendef : Pat<(extloadi32i8 rriaddr:$src), (MOVZX32rm8 rriaddr:$src)>; 836bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswelldef : Pat<(extloadi32i16 rriaddr:$src), (MOVZX32rm16 rriaddr:$src)>; 837f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbardef : Pat<(extloadi64i8 rriaddr:$src), (MOVZX64rm8 rriaddr:$src)>; 838508955156a25a9abc470a29e1760aa176d341cf9Owen Andersondef : Pat<(extloadi64i16 rriaddr:$src), (MOVZX64rm16 rriaddr:$src)>; 839f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbardef : Pat<(extloadi64i32 rriaddr:$src), (MOVZX64rm32 rriaddr:$src)>; 840508955156a25a9abc470a29e1760aa176d341cf9Owen Anderson 841f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar// muls 842508955156a25a9abc470a29e1760aa176d341cf9Owen Andersondef : Pat<(mulhs GR32:$src1, GR32:$src2), 843b5282dcf4745be59046f440980a1c0f0a50c9c09Chris Lattner (EXTRACT_SUBREG (MUL64rrP (INSERT_SUBREG (v2i32 (IMPLICIT_DEF)), 844b5282dcf4745be59046f440980a1c0f0a50c9c09Chris Lattner GR32:$src1, subreg_odd32), 845f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbar GR32:$src2), 8466f83c9c6ef0e7f79825a0a8f22941815e4b684c7Owen Anderson subreg_even32)>; 84702a260aa11a2e1b2c14335274d3c42ca3f3eabc0Chris Lattner 848f0443c1eb44d737d9bd78962932fc80f74c6113cDaniel Dunbardef : Pat<(mulhu GR32:$src1, GR32:$src2), 8496f83c9c6ef0e7f79825a0a8f22941815e4b684c7Owen Anderson (EXTRACT_SUBREG (UMUL64rrP (INSERT_SUBREG (v2i32 (IMPLICIT_DEF)), 85002a260aa11a2e1b2c14335274d3c42ca3f3eabc0Chris Lattner GR32:$src1, subreg_odd32), 851b5282dcf4745be59046f440980a1c0f0a50c9c09Chris Lattner GR32:$src2), 852bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell subreg_even32)>; 853bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswelldef : Pat<(mulhu GR64:$src1, GR64:$src2), 854bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell (EXTRACT_SUBREG (UMUL128rrP (INSERT_SUBREG (v2i64 (IMPLICIT_DEF)), 855bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell GR64:$src1, subreg_odd), 856bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell GR64:$src2), 857bd9d37026a5c17d9a51371a6a5446bf4761ee7d6John Criswell subreg_even)>; 858