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