• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16/* {mop, opnds, prop, latency, name, format, length} */
17/* begin machine operation code of X86_64 instruction , */
18DEFINE_MOP(MOP_begin, {},0,0,"","",0)
19
20/* # Definitions
21 * use x64 style b/w/l/q for 8b/16b/32b/64b operation
22 * and using AT&T style assembly
23 */
24
25/* X64 MOVES */
26// TODO: fix intruction opnds, prop, latency, format and length
27// TODO: the encoding and enumeration seems too verbose
28// TODO: understand how other system represent these MOPs (especially for x86-64)
29// TODO: this is still an experiment
30// TODO: should make sure the convention is consistent with (AT&T style?)
31// TODO: how the general Machine instruction is designed?
32
33/* mov */
34DEFINE_MOP(MOP_movb_r_r, {&OpndDesc::Reg8IS,&OpndDesc::Reg8ID},ISMOVE,kLtAlu,"movb","0,1",1)
35DEFINE_MOP(MOP_movb_i_r, {&OpndDesc::Imm8,&OpndDesc::Reg8ID},ISMOVE,kLtAlu,"movb","0,1",1)
36DEFINE_MOP(MOP_movb_m_r, {&OpndDesc::Mem8S,&OpndDesc::Reg8ID},ISLOAD,kLtAlu,"movb","0,1",1)
37DEFINE_MOP(MOP_movb_r_m, {&OpndDesc::Reg8IS,&OpndDesc::Mem8D},ISSTORE,kLtAlu,"movb","0,1",1)
38DEFINE_MOP(MOP_movb_i_m, {&OpndDesc::Imm8,&OpndDesc::Mem8D},ISSTORE,kLtAlu,"movb","0,1",1)
39
40DEFINE_MOP(MOP_movw_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg16ID},ISMOVE,kLtAlu,"movw","0,1",1)
41DEFINE_MOP(MOP_movw_i_r, {&OpndDesc::Imm16,&OpndDesc::Reg16ID},ISMOVE,kLtAlu,"movw","0,1",1)
42DEFINE_MOP(MOP_movw_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg16ID},ISLOAD,kLtAlu,"movw","0,1",1)
43DEFINE_MOP(MOP_movw_r_m, {&OpndDesc::Reg16IS,&OpndDesc::Mem16D},ISSTORE,kLtAlu,"movw","0,1",1)
44DEFINE_MOP(MOP_movw_i_m, {&OpndDesc::Imm16,&OpndDesc::Mem16D},ISSTORE,kLtAlu,"movw","0,1",1)
45
46DEFINE_MOP(MOP_movl_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32ID},ISMOVE,kLtAlu,"movl","0,1",1)
47DEFINE_MOP(MOP_movl_i_r, {&OpndDesc::Imm32,&OpndDesc::Reg32ID},ISMOVE,kLtAlu,"movl","0,1",1)
48DEFINE_MOP(MOP_movl_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg32ID},ISLOAD,kLtAlu,"movl","0,1",1)
49DEFINE_MOP(MOP_movl_r_m, {&OpndDesc::Reg32IS,&OpndDesc::Mem32D},ISSTORE,kLtAlu,"movl","0,1",1)
50DEFINE_MOP(MOP_movl_i_m, {&OpndDesc::Imm32,&OpndDesc::Mem32D},ISSTORE,kLtAlu,"movl","0,1",1)
51
52DEFINE_MOP(MOP_movq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64ID},ISMOVE,kLtAlu,"movq","0,1",1)
53DEFINE_MOP(MOP_movq_i_r, {&OpndDesc::Imm64,&OpndDesc::Reg64ID},ISMOVE,kLtAlu,"movq","0,1",1)
54DEFINE_MOP(MOP_movq_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg64ID},ISLOAD,kLtAlu,"movq","0,1",1)
55DEFINE_MOP(MOP_movq_r_m, {&OpndDesc::Reg64IS,&OpndDesc::Mem64D},ISSTORE,kLtAlu,"movq","0,1",1)
56
57/* floating point mov */
58DEFINE_MOP(MOP_movd_fr_r, {&OpndDesc::Reg128FS,&OpndDesc::Reg32ID},ISSTORE,kLtAlu,"movd","0,1",1)
59DEFINE_MOP(MOP_movq_fr_r, {&OpndDesc::Reg128FS,&OpndDesc::Reg64ID},ISSTORE,kLtAlu,"movq","0,1",1)
60DEFINE_MOP(MOP_movd_r_fr, {&OpndDesc::Reg32IS,&OpndDesc::Reg128FD},ISSTORE,kLtAlu,"movd","0,1",1)
61DEFINE_MOP(MOP_movq_r_fr, {&OpndDesc::Reg64IS,&OpndDesc::Reg128FD},ISSTORE,kLtAlu,"movq","0,1",1)
62DEFINE_MOP(MOP_movfs_r_r, {&OpndDesc::Reg128FS,&OpndDesc::Reg128FD},ISLOAD,kLtAlu,"movss","0,1",1)
63DEFINE_MOP(MOP_movfd_r_r, {&OpndDesc::Reg128FS,&OpndDesc::Reg128FD},ISLOAD,kLtAlu,"movsd","0,1",1)
64DEFINE_MOP(MOP_movfs_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg128FD},ISLOAD,kLtAlu,"movss","0,1",1)
65DEFINE_MOP(MOP_movfs_r_m, {&OpndDesc::Reg128FS,&OpndDesc::Mem128D},ISSTORE,kLtAlu,"movss","0,1",1)
66DEFINE_MOP(MOP_movfd_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg128FD},ISLOAD,kLtAlu,"movsd","0,1",1)
67DEFINE_MOP(MOP_movfd_r_m, {&OpndDesc::Reg128FS,&OpndDesc::Mem128D},ISSTORE,kLtAlu,"movsd","0,1",1)
68
69/* movabs */
70//The movabs instruction to load arbitrary 64-bit constant into register and to load/store integer register from/to arbitrary constant 64-bit address is available
71DEFINE_MOP(MOP_movabs_i_r, {&OpndDesc::Imm64,&OpndDesc::Reg64ID},ISMOVE,kLtAlu,"movabs","0,1",1)
72DEFINE_MOP(MOP_movabs_l_r, {&OpndDesc::Lbl64,&OpndDesc::Reg64ID},ISMOVE,kLtAlu,"movabs","0,1",1)
73
74/* push & pop & lea */
75DEFINE_MOP(MOP_pushq_r, {&OpndDesc::Reg64IS},0,kLtAlu,"pushq","0",1)
76DEFINE_MOP(MOP_popq_r, {&OpndDesc::Reg32IS},0,kLtAlu,"popq","0",1)
77
78DEFINE_MOP(MOP_leaq_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg64ID},0,kLtAlu,"leaq","0,1",1)
79DEFINE_MOP(MOP_leal_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg64ID},0,kLtAlu,"leaq","0,1",1)
80DEFINE_MOP(MOP_leaw_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg64ID},0,kLtAlu,"leaq","0,1",1)
81
82/* Moving from a smaller data size to 32 bits */
83/* zero extension */
84DEFINE_MOP(MOP_movzbw_m_r, {&OpndDesc::Mem8S,&OpndDesc::Reg16ID},ISCONVERSION,kLtAlu,"movzbw","0,1",1)
85DEFINE_MOP(MOP_movzbw_r_r, {&OpndDesc::Reg8IS,&OpndDesc::Reg16ID},ISCONVERSION,kLtAlu,"movzbw","0,1",1)
86DEFINE_MOP(MOP_movzbl_m_r, {&OpndDesc::Mem8S,&OpndDesc::Reg32ID},ISCONVERSION,kLtAlu,"movzbl","0,1",1)
87DEFINE_MOP(MOP_movzbl_r_r, {&OpndDesc::Reg8IS,&OpndDesc::Reg32ID},ISCONVERSION,kLtAlu,"movzbl","0,1",1)
88DEFINE_MOP(MOP_movzwl_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg32ID},ISCONVERSION,kLtAlu,"movzwl","0,1",1)
89DEFINE_MOP(MOP_movzwl_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg32ID},ISCONVERSION,kLtAlu,"movzwl","0,1",1)
90/* sign extension */
91DEFINE_MOP(MOP_movsbw_m_r, {&OpndDesc::Mem8S,&OpndDesc::Reg16ID},ISCONVERSION,kLtAlu,"movsbw","0,1",1)
92DEFINE_MOP(MOP_movsbw_r_r, {&OpndDesc::Reg8IS,&OpndDesc::Reg16ID},ISCONVERSION,kLtAlu,"movsbw","0,1",1)
93DEFINE_MOP(MOP_movsbl_m_r, {&OpndDesc::Mem8S,&OpndDesc::Reg32ID},ISCONVERSION,kLtAlu,"movsbl","0,1",1)
94DEFINE_MOP(MOP_movsbl_r_r, {&OpndDesc::Reg8IS,&OpndDesc::Reg32ID},ISCONVERSION,kLtAlu,"movsbl","0,1",1)
95DEFINE_MOP(MOP_movswl_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg32ID},ISCONVERSION,kLtAlu,"movswl","0,1",1)
96DEFINE_MOP(MOP_movswl_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg32ID},ISCONVERSION,kLtAlu,"movswl","0,1",1)
97
98/* Moving from a smaller data size to 64 bits */
99/* zero extension */
100/*
101 * Perhaps unexpectedly, instructions that move or generate 32-bit register values also set the upper 32 bits of the register to zero.
102 * Consequently, there is no need for an instruction movzlq.
103 */
104DEFINE_MOP(MOP_movzbq_m_r, {&OpndDesc::Mem8S,&OpndDesc::Reg64ID},ISCONVERSION,kLtAlu,"movzbq","0,1",1)
105DEFINE_MOP(MOP_movzbq_r_r, {&OpndDesc::Reg8IS,&OpndDesc::Reg64ID},ISCONVERSION,kLtAlu,"movzbq","0,1",1)
106DEFINE_MOP(MOP_movzwq_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg64ID},ISCONVERSION,kLtAlu,"movzwq","0,1",1)
107DEFINE_MOP(MOP_movzwq_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg64ID},ISCONVERSION,kLtAlu,"movzwq","0,1",1)
108/* sign extension */
109DEFINE_MOP(MOP_movsbq_m_r, {&OpndDesc::Mem8S,&OpndDesc::Reg64ID},ISCONVERSION,kLtAlu,"movsbq","0,1",1)
110DEFINE_MOP(MOP_movsbq_r_r, {&OpndDesc::Reg8IS,&OpndDesc::Reg64ID},ISCONVERSION,kLtAlu,"movsbq","0,1",1)
111DEFINE_MOP(MOP_movswq_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg64ID},ISCONVERSION,kLtAlu,"movswq","0,1",1)
112DEFINE_MOP(MOP_movswq_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg64ID},ISCONVERSION,kLtAlu,"movswq","0,1",1)
113DEFINE_MOP(MOP_movslq_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg64ID},ISCONVERSION,kLtAlu,"movslq","0,1",1)
114DEFINE_MOP(MOP_movslq_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg64ID},ISCONVERSION,kLtAlu,"movslq","0,1",1)
115
116/* BasicOp */
117/* add */
118DEFINE_MOP(MOP_addb_r_r, {&OpndDesc::Reg8IS,&OpndDesc::Reg8IDS},ISBASICOP,kLtAlu,"addb","0,1",1)
119DEFINE_MOP(MOP_addw_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg16IDS},ISBASICOP,kLtAlu,"addw","0,1",1)
120DEFINE_MOP(MOP_addl_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32IDS},ISBASICOP,kLtAlu,"addl","0,1",1)
121DEFINE_MOP(MOP_addq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64IDS},ISBASICOP,kLtAlu,"addq","0,1",1)
122DEFINE_MOP(MOP_addb_m_r, {&OpndDesc::Mem8S,&OpndDesc::Reg8IDS},ISBASICOP,kLtAlu,"addb","0,1",1)
123DEFINE_MOP(MOP_addw_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg16IDS},ISBASICOP,kLtAlu,"addw","0,1",1)
124DEFINE_MOP(MOP_addl_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg32IDS},ISBASICOP,kLtAlu,"addl","0,1",1)
125DEFINE_MOP(MOP_addq_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg64IDS},ISBASICOP,kLtAlu,"addq","0,1",1)
126DEFINE_MOP(MOP_addb_i_r, {&OpndDesc::Imm8,&OpndDesc::Reg8IDS},ISBASICOP,kLtAlu,"addb","0,1",1)
127DEFINE_MOP(MOP_addw_i_r, {&OpndDesc::Imm16,&OpndDesc::Reg16IDS},ISBASICOP,kLtAlu,"addw","0,1",1)
128DEFINE_MOP(MOP_addl_i_r, {&OpndDesc::Imm32,&OpndDesc::Reg32IDS},ISBASICOP,kLtAlu,"addl","0,1",1)
129DEFINE_MOP(MOP_addq_i_r, {&OpndDesc::Imm32,&OpndDesc::Reg64IDS},ISBASICOP,kLtAlu,"addq","0,1",1)
130DEFINE_MOP(MOP_addb_r_m, {&OpndDesc::Reg8IS,&OpndDesc::Mem8D},ISBASICOP,kLtAlu,"addb","0,1",1)
131DEFINE_MOP(MOP_addw_r_m, {&OpndDesc::Reg16IS,&OpndDesc::Mem16D},ISBASICOP,kLtAlu,"addw","0,1",1)
132DEFINE_MOP(MOP_addl_r_m, {&OpndDesc::Reg32IS,&OpndDesc::Mem32D},ISBASICOP,kLtAlu,"addl","0,1",1)
133DEFINE_MOP(MOP_addq_r_m, {&OpndDesc::Reg64IS,&OpndDesc::Mem64D},ISBASICOP,kLtAlu,"addq","0,1",1)
134DEFINE_MOP(MOP_addb_i_m, {&OpndDesc::Imm8,&OpndDesc::Mem8D},ISBASICOP,kLtAlu,"addb","0,1",1)
135DEFINE_MOP(MOP_addw_i_m, {&OpndDesc::Imm16,&OpndDesc::Mem16D},ISBASICOP,kLtAlu,"addw","0,1",1)
136DEFINE_MOP(MOP_addl_i_m, {&OpndDesc::Imm32,&OpndDesc::Mem32D},ISBASICOP,kLtAlu,"addl","0,1",1)
137DEFINE_MOP(MOP_addq_i_m, {&OpndDesc::Imm32,&OpndDesc::Mem64D},ISBASICOP,kLtAlu,"addq","0,1",1)
138/* add floating point */
139DEFINE_MOP(MOP_adds_r_r, {&OpndDesc::Reg128FS,&OpndDesc::Reg128FDS},ISBASICOP,kLtAlu,"addss","0,1",1)
140DEFINE_MOP(MOP_adds_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg128FDS},ISBASICOP,kLtAlu,"addss","0,1",1)
141DEFINE_MOP(MOP_addd_r_r, {&OpndDesc::Reg128FS,&OpndDesc::Reg128FDS},ISBASICOP,kLtAlu,"addsd","0,1",1)
142DEFINE_MOP(MOP_addd_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg128FDS},ISBASICOP,kLtAlu,"addsd","0,1",1)
143/* sub */
144DEFINE_MOP(MOP_subb_r_r, {&OpndDesc::Reg8IS,&OpndDesc::Reg8IDS},ISBASICOP,kLtAlu,"subb","0,1",1)
145DEFINE_MOP(MOP_subw_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg16IDS},ISBASICOP,kLtAlu,"subw","0,1",1)
146DEFINE_MOP(MOP_subl_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32IDS},ISBASICOP,kLtAlu,"subl","0,1",1)
147DEFINE_MOP(MOP_subq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64IDS},ISBASICOP,kLtAlu,"subq","0,1",1)
148DEFINE_MOP(MOP_subb_m_r, {&OpndDesc::Mem8S,&OpndDesc::Reg8IDS},ISBASICOP,kLtAlu,"subb","0,1",1)
149DEFINE_MOP(MOP_subw_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg16IDS},ISBASICOP,kLtAlu,"subw","0,1",1)
150DEFINE_MOP(MOP_subl_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg32IDS},ISBASICOP,kLtAlu,"subl","0,1",1)
151DEFINE_MOP(MOP_subq_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg64IDS},ISBASICOP,kLtAlu,"subq","0,1",1)
152DEFINE_MOP(MOP_subb_i_r, {&OpndDesc::Imm8,&OpndDesc::Reg8IDS},ISBASICOP,kLtAlu,"subb","0,1",1)
153DEFINE_MOP(MOP_subw_i_r, {&OpndDesc::Imm16,&OpndDesc::Reg16IDS},ISBASICOP,kLtAlu,"subw","0,1",1)
154DEFINE_MOP(MOP_subl_i_r, {&OpndDesc::Imm32,&OpndDesc::Reg32IDS},ISBASICOP,kLtAlu,"subl","0,1",1)
155DEFINE_MOP(MOP_subq_i_r, {&OpndDesc::Imm32,&OpndDesc::Reg64IDS},ISBASICOP,kLtAlu,"subq","0,1",1)
156DEFINE_MOP(MOP_subb_r_m, {&OpndDesc::Reg8IS,&OpndDesc::Mem8D},ISBASICOP,kLtAlu,"subb","0,1",1)
157DEFINE_MOP(MOP_subw_r_m, {&OpndDesc::Reg16IS,&OpndDesc::Mem16D},ISBASICOP,kLtAlu,"subw","0,1",1)
158DEFINE_MOP(MOP_subl_r_m, {&OpndDesc::Reg32IS,&OpndDesc::Mem32D},ISBASICOP,kLtAlu,"subl","0,1",1)
159DEFINE_MOP(MOP_subq_r_m, {&OpndDesc::Reg64IS,&OpndDesc::Mem64D},ISBASICOP,kLtAlu,"subq","0,1",1)
160DEFINE_MOP(MOP_subb_i_m, {&OpndDesc::Imm8,&OpndDesc::Mem8D},ISBASICOP,kLtAlu,"subb","0,1",1)
161DEFINE_MOP(MOP_subw_i_m, {&OpndDesc::Imm16,&OpndDesc::Mem16D},ISBASICOP,kLtAlu,"subw","0,1",1)
162DEFINE_MOP(MOP_subl_i_m, {&OpndDesc::Imm32,&OpndDesc::Mem32D},ISBASICOP,kLtAlu,"subl","0,1",1)
163DEFINE_MOP(MOP_subq_i_m, {&OpndDesc::Imm32,&OpndDesc::Mem64D},ISBASICOP,kLtAlu,"subq","0,1",1)
164/* sub floating point */
165DEFINE_MOP(MOP_subs_r_r, {&OpndDesc::Reg128FS,&OpndDesc::Reg128FDS},ISBASICOP,kLtAlu,"subss","0,1",1)
166DEFINE_MOP(MOP_subs_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg128FDS},ISBASICOP,kLtAlu,"subss","0,1",1)
167DEFINE_MOP(MOP_subd_r_r, {&OpndDesc::Reg128FS,&OpndDesc::Reg128FDS},ISBASICOP,kLtAlu,"subsd","0,1",1)
168DEFINE_MOP(MOP_subd_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg128FDS},ISBASICOP,kLtAlu,"subsd","0,1",1)
169/* and */
170DEFINE_MOP(MOP_andb_r_r, {&OpndDesc::Reg8IS,&OpndDesc::Reg8IDS},ISBASICOP,kLtAlu,"andb","0,1",1)
171DEFINE_MOP(MOP_andw_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg16IDS},ISBASICOP,kLtAlu,"andw","0,1",1)
172DEFINE_MOP(MOP_andl_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32IDS},ISBASICOP,kLtAlu,"andl","0,1",1)
173DEFINE_MOP(MOP_andq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64IDS},ISBASICOP,kLtAlu,"andq","0,1",1)
174DEFINE_MOP(MOP_andb_m_r, {&OpndDesc::Mem8S,&OpndDesc::Reg8IDS},ISBASICOP,kLtAlu,"andb","0,1",1)
175DEFINE_MOP(MOP_andw_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg16IDS},ISBASICOP,kLtAlu,"andw","0,1",1)
176DEFINE_MOP(MOP_andl_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg32IDS},ISBASICOP,kLtAlu,"andl","0,1",1)
177DEFINE_MOP(MOP_andq_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg64IDS},ISBASICOP,kLtAlu,"andq","0,1",1)
178DEFINE_MOP(MOP_andb_i_r, {&OpndDesc::Imm8,&OpndDesc::Reg8IDS},ISBASICOP,kLtAlu,"andb","0,1",1)
179DEFINE_MOP(MOP_andw_i_r, {&OpndDesc::Imm16,&OpndDesc::Reg16IDS},ISBASICOP,kLtAlu,"andw","0,1",1)
180DEFINE_MOP(MOP_andl_i_r, {&OpndDesc::Imm32,&OpndDesc::Reg32IDS},ISBASICOP,kLtAlu,"andl","0,1",1)
181DEFINE_MOP(MOP_andq_i_r, {&OpndDesc::Imm32,&OpndDesc::Reg64IDS},ISBASICOP,kLtAlu,"andq","0,1",1)
182DEFINE_MOP(MOP_andb_r_m, {&OpndDesc::Reg8IS,&OpndDesc::Mem8D},ISBASICOP,kLtAlu,"andb","0,1",1)
183DEFINE_MOP(MOP_andw_r_m, {&OpndDesc::Reg16IS,&OpndDesc::Mem16D},ISBASICOP,kLtAlu,"andw","0,1",1)
184DEFINE_MOP(MOP_andl_r_m, {&OpndDesc::Reg32IS,&OpndDesc::Mem32D},ISBASICOP,kLtAlu,"andl","0,1",1)
185DEFINE_MOP(MOP_andq_r_m, {&OpndDesc::Reg64IS,&OpndDesc::Mem64D},ISBASICOP,kLtAlu,"andq","0,1",1)
186DEFINE_MOP(MOP_andb_i_m, {&OpndDesc::Imm8,&OpndDesc::Mem8D},ISBASICOP,kLtAlu,"andb","0,1",1)
187DEFINE_MOP(MOP_andw_i_m, {&OpndDesc::Imm16,&OpndDesc::Mem16D},ISBASICOP,kLtAlu,"andw","0,1",1)
188DEFINE_MOP(MOP_andl_i_m, {&OpndDesc::Imm32,&OpndDesc::Mem32D},ISBASICOP,kLtAlu,"andl","0,1",1)
189DEFINE_MOP(MOP_andq_i_m, {&OpndDesc::Imm32,&OpndDesc::Mem64D},ISBASICOP,kLtAlu,"andq","0,1",1)
190/* or */
191DEFINE_MOP(MOP_orb_r_r, {&OpndDesc::Reg8IS,&OpndDesc::Reg8IDS},ISBASICOP,kLtAlu,"orb","0,1",1)
192DEFINE_MOP(MOP_orw_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg16IDS},ISBASICOP,kLtAlu,"orw","0,1",1)
193DEFINE_MOP(MOP_orl_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32IDS},ISBASICOP,kLtAlu,"orl","0,1",1)
194DEFINE_MOP(MOP_orq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64IDS},ISBASICOP,kLtAlu,"orq","0,1",1)
195DEFINE_MOP(MOP_orb_m_r, {&OpndDesc::Mem8S,&OpndDesc::Reg8IDS},ISBASICOP,kLtAlu,"orb","0,1",1)
196DEFINE_MOP(MOP_orw_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg16IDS},ISBASICOP,kLtAlu,"orw","0,1",1)
197DEFINE_MOP(MOP_orl_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg32IDS},ISBASICOP,kLtAlu,"orl","0,1",1)
198DEFINE_MOP(MOP_orq_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg64IDS},ISBASICOP,kLtAlu,"orq","0,1",1)
199DEFINE_MOP(MOP_orb_i_r, {&OpndDesc::Imm8,&OpndDesc::Reg8IDS},ISBASICOP,kLtAlu,"orb","0,1",1)
200DEFINE_MOP(MOP_orw_i_r, {&OpndDesc::Imm16,&OpndDesc::Reg16IDS},ISBASICOP,kLtAlu,"orw","0,1",1)
201DEFINE_MOP(MOP_orl_i_r, {&OpndDesc::Imm32,&OpndDesc::Reg32IDS},ISBASICOP,kLtAlu,"orl","0,1",1)
202DEFINE_MOP(MOP_orq_i_r, {&OpndDesc::Imm32,&OpndDesc::Reg64IDS},ISBASICOP,kLtAlu,"orq","0,1",1)
203DEFINE_MOP(MOP_orb_r_m, {&OpndDesc::Reg8IS,&OpndDesc::Mem8D},ISBASICOP,kLtAlu,"orb","0,1",1)
204DEFINE_MOP(MOP_orw_r_m, {&OpndDesc::Reg16IS,&OpndDesc::Mem16D},ISBASICOP,kLtAlu,"orw","0,1",1)
205DEFINE_MOP(MOP_orl_r_m, {&OpndDesc::Reg32IS,&OpndDesc::Mem32D},ISBASICOP,kLtAlu,"orl","0,1",1)
206DEFINE_MOP(MOP_orq_r_m, {&OpndDesc::Reg64IS,&OpndDesc::Mem64D},ISBASICOP,kLtAlu,"orq","0,1",1)
207DEFINE_MOP(MOP_orb_i_m, {&OpndDesc::Imm8,&OpndDesc::Mem8D},ISBASICOP,kLtAlu,"orb","0,1",1)
208DEFINE_MOP(MOP_orw_i_m, {&OpndDesc::Imm16,&OpndDesc::Mem16D},ISBASICOP,kLtAlu,"orw","0,1",1)
209DEFINE_MOP(MOP_orl_i_m, {&OpndDesc::Imm32,&OpndDesc::Mem32D},ISBASICOP,kLtAlu,"orl","0,1",1)
210DEFINE_MOP(MOP_orq_i_m, {&OpndDesc::Imm32,&OpndDesc::Mem64D},ISBASICOP,kLtAlu,"orq","0,1",1)
211/* xor */
212DEFINE_MOP(MOP_xorb_r_r, {&OpndDesc::Reg8IS,&OpndDesc::Reg8IDS},ISBASICOP,kLtAlu,"xorb","0,1",1)
213DEFINE_MOP(MOP_xorw_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg16IDS},ISBASICOP,kLtAlu,"xorw","0,1",1)
214DEFINE_MOP(MOP_xorl_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32IDS},ISBASICOP,kLtAlu,"xorl","0,1",1)
215DEFINE_MOP(MOP_xorq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64IDS},ISBASICOP,kLtAlu,"xorq","0,1",1)
216DEFINE_MOP(MOP_xorb_m_r, {&OpndDesc::Mem8S,&OpndDesc::Reg8IDS},ISBASICOP,kLtAlu,"xorb","0,1",1)
217DEFINE_MOP(MOP_xorw_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg16IDS},ISBASICOP,kLtAlu,"xorw","0,1",1)
218DEFINE_MOP(MOP_xorl_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg32IDS},ISBASICOP,kLtAlu,"xorl","0,1",1)
219DEFINE_MOP(MOP_xorq_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg64IDS},ISBASICOP,kLtAlu,"xorq","0,1",1)
220DEFINE_MOP(MOP_xorb_i_r, {&OpndDesc::Imm8,&OpndDesc::Reg8IDS},ISBASICOP,kLtAlu,"xorb","0,1",1)
221DEFINE_MOP(MOP_xorw_i_r, {&OpndDesc::Imm16,&OpndDesc::Reg16IDS},ISBASICOP,kLtAlu,"xorw","0,1",1)
222DEFINE_MOP(MOP_xorl_i_r, {&OpndDesc::Imm32,&OpndDesc::Reg32IDS},ISBASICOP,kLtAlu,"xorl","0,1",1)
223DEFINE_MOP(MOP_xorq_i_r, {&OpndDesc::Imm32,&OpndDesc::Reg64IDS},ISBASICOP,kLtAlu,"xorq","0,1",1)
224DEFINE_MOP(MOP_xorb_r_m, {&OpndDesc::Reg8IS,&OpndDesc::Mem8D},ISBASICOP,kLtAlu,"xorb","0,1",1)
225DEFINE_MOP(MOP_xorw_r_m, {&OpndDesc::Reg16IS,&OpndDesc::Mem16D},ISBASICOP,kLtAlu,"xorw","0,1",1)
226DEFINE_MOP(MOP_xorl_r_m, {&OpndDesc::Reg32IS,&OpndDesc::Mem32D},ISBASICOP,kLtAlu,"xorl","0,1",1)
227DEFINE_MOP(MOP_xorq_r_m, {&OpndDesc::Reg64IS,&OpndDesc::Mem64D},ISBASICOP,kLtAlu,"xorq","0,1",1)
228DEFINE_MOP(MOP_xorb_i_m, {&OpndDesc::Imm8,&OpndDesc::Mem8D},ISBASICOP,kLtAlu,"xorb","0,1",1)
229DEFINE_MOP(MOP_xorw_i_m, {&OpndDesc::Imm16,&OpndDesc::Mem16D},ISBASICOP,kLtAlu,"xorw","0,1",1)
230DEFINE_MOP(MOP_xorl_i_m, {&OpndDesc::Imm32,&OpndDesc::Mem32D},ISBASICOP,kLtAlu,"xorl","0,1",1)
231DEFINE_MOP(MOP_xorq_i_m, {&OpndDesc::Imm32,&OpndDesc::Mem64D},ISBASICOP,kLtAlu,"xorq","0,1",1)
232
233DEFINE_MOP(MOP_bsrq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64ID},ISBASICOP,kLtAlu,"bsrq","0,1",1)
234DEFINE_MOP(MOP_bsrl_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32ID},ISBASICOP,kLtAlu,"bsrl","0,1",1)
235
236DEFINE_MOP(MOP_bsfq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64ID},ISBASICOP,kLtAlu,"bsfq","0,1",1)
237DEFINE_MOP(MOP_bsfl_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32ID},ISBASICOP,kLtAlu,"bsfl","0,1",1)
238/* UnaryOp */
239/* neg */
240DEFINE_MOP(MOP_negb_r, {&OpndDesc::Reg8IDS},ISUNARYOP,kLtAlu,"negb","0",1)
241DEFINE_MOP(MOP_negw_r, {&OpndDesc::Reg16IDS},ISUNARYOP,kLtAlu,"negw","0",1)
242DEFINE_MOP(MOP_negl_r, {&OpndDesc::Reg32IDS},ISUNARYOP,kLtAlu,"negl","0",1)
243DEFINE_MOP(MOP_negq_r, {&OpndDesc::Reg64IDS},ISUNARYOP,kLtAlu,"negq","0",1)
244DEFINE_MOP(MOP_negb_m, {&OpndDesc::Mem8S},ISUNARYOP,kLtAlu,"negb","0",1)
245DEFINE_MOP(MOP_negw_m, {&OpndDesc::Mem16S},ISUNARYOP,kLtAlu,"negw","0",1)
246DEFINE_MOP(MOP_negl_m, {&OpndDesc::Mem32S},ISUNARYOP,kLtAlu,"negl","0",1)
247DEFINE_MOP(MOP_negq_m, {&OpndDesc::Mem64S},ISUNARYOP,kLtAlu,"negq","0",1)
248/* not */
249DEFINE_MOP(MOP_notb_r, {&OpndDesc::Reg8IDS},ISUNARYOP,kLtAlu,"notb","0",1)
250DEFINE_MOP(MOP_notw_r, {&OpndDesc::Reg16IDS},ISUNARYOP,kLtAlu,"notw","0",1)
251DEFINE_MOP(MOP_notl_r, {&OpndDesc::Reg32IDS},ISUNARYOP,kLtAlu,"notl","0",1)
252DEFINE_MOP(MOP_notq_r, {&OpndDesc::Reg64IDS},ISUNARYOP,kLtAlu,"notq","0",1)
253DEFINE_MOP(MOP_notb_m, {&OpndDesc::Mem8S},ISUNARYOP,kLtAlu,"notb","0",1)
254DEFINE_MOP(MOP_notw_m, {&OpndDesc::Mem16S},ISUNARYOP,kLtAlu,"notw","0",1)
255DEFINE_MOP(MOP_notl_m, {&OpndDesc::Mem32S},ISUNARYOP,kLtAlu,"notl","0",1)
256DEFINE_MOP(MOP_notq_m, {&OpndDesc::Mem64S},ISUNARYOP,kLtAlu,"notq","0",1)
257
258/* shift -- shl/sar/shr reg8, use cl */
259/* shl */
260DEFINE_MOP(MOP_shlb_r_r, {&OpndDesc::Reg8IS, &OpndDesc::Reg8IDS},ISSHIFT,kLtAlu,"shlb","0,1",1)
261DEFINE_MOP(MOP_shlw_r_r, {&OpndDesc::Reg8IS, &OpndDesc::Reg16IDS},ISSHIFT,kLtAlu,"shlw","0,1",1)
262DEFINE_MOP(MOP_shll_r_r, {&OpndDesc::Reg8IS, &OpndDesc::Reg32IDS},ISSHIFT,kLtAlu,"shll","0,1",1)
263DEFINE_MOP(MOP_shlq_r_r, {&OpndDesc::Reg8IS, &OpndDesc::Reg64IDS},ISSHIFT,kLtAlu,"shlq","0,1",1)
264DEFINE_MOP(MOP_shlb_i_r, {&OpndDesc::Imm8, &OpndDesc::Reg8IDS},ISSHIFT,kLtAlu,"shlb","0,1",1)
265DEFINE_MOP(MOP_shlw_i_r, {&OpndDesc::Imm8, &OpndDesc::Reg16IDS},ISSHIFT,kLtAlu,"shlw","0,1",1)
266DEFINE_MOP(MOP_shll_i_r, {&OpndDesc::Imm8, &OpndDesc::Reg32IDS},ISSHIFT,kLtAlu,"shll","0,1",1)
267DEFINE_MOP(MOP_shlq_i_r, {&OpndDesc::Imm8, &OpndDesc::Reg64IDS},ISSHIFT,kLtAlu,"shlq","0,1",1)
268DEFINE_MOP(MOP_shlb_r_m, {&OpndDesc::Reg8IS, &OpndDesc::Mem8D},ISSHIFT,kLtAlu,"shlb","0,1",1)
269DEFINE_MOP(MOP_shlw_r_m, {&OpndDesc::Reg8IS, &OpndDesc::Mem16D},ISSHIFT,kLtAlu,"shlw","0,1",1)
270DEFINE_MOP(MOP_shll_r_m, {&OpndDesc::Reg8IS, &OpndDesc::Mem32D},ISSHIFT,kLtAlu,"shll","0,1",1)
271DEFINE_MOP(MOP_shlq_r_m, {&OpndDesc::Reg8IS, &OpndDesc::Mem64D},ISSHIFT,kLtAlu,"shlq","0,1",1)
272DEFINE_MOP(MOP_shlb_i_m, {&OpndDesc::Imm8, &OpndDesc::Mem8D},ISSHIFT,kLtAlu,"shlb","0,1",1)
273DEFINE_MOP(MOP_shlw_i_m, {&OpndDesc::Imm8, &OpndDesc::Mem16D},ISSHIFT,kLtAlu,"shlw","0,1",1)
274DEFINE_MOP(MOP_shll_i_m, {&OpndDesc::Imm8, &OpndDesc::Mem32D},ISSHIFT,kLtAlu,"shll","0,1",1)
275DEFINE_MOP(MOP_shlq_i_m, {&OpndDesc::Imm8, &OpndDesc::Mem64D},ISSHIFT,kLtAlu,"shlq","0,1",1)
276/* sar */
277DEFINE_MOP(MOP_sarb_r_r, {&OpndDesc::Reg8IS, &OpndDesc::Reg8IDS},ISSHIFT,kLtAlu,"sarb","0,1",1)
278DEFINE_MOP(MOP_sarw_r_r, {&OpndDesc::Reg8IS, &OpndDesc::Reg16IDS},ISSHIFT,kLtAlu,"sarw","0,1",1)
279DEFINE_MOP(MOP_sarl_r_r, {&OpndDesc::Reg8IS, &OpndDesc::Reg32IDS},ISSHIFT,kLtAlu,"sarl","0,1",1)
280DEFINE_MOP(MOP_sarq_r_r, {&OpndDesc::Reg8IS, &OpndDesc::Reg64IDS},ISSHIFT,kLtAlu,"sarq","0,1",1)
281DEFINE_MOP(MOP_sarb_i_r, {&OpndDesc::Imm8, &OpndDesc::Reg8IDS},ISSHIFT,kLtAlu,"sarb","0,1",1)
282DEFINE_MOP(MOP_sarw_i_r, {&OpndDesc::Imm8, &OpndDesc::Reg16IDS},ISSHIFT,kLtAlu,"sarw","0,1",1)
283DEFINE_MOP(MOP_sarl_i_r, {&OpndDesc::Imm8, &OpndDesc::Reg32IDS},ISSHIFT,kLtAlu,"sarl","0,1",1)
284DEFINE_MOP(MOP_sarq_i_r, {&OpndDesc::Imm8, &OpndDesc::Reg64IDS},ISSHIFT,kLtAlu,"sarq","0,1",1)
285DEFINE_MOP(MOP_sarb_r_m, {&OpndDesc::Reg8IS, &OpndDesc::Mem8D},ISSHIFT,kLtAlu,"sarb","0,1",1)
286DEFINE_MOP(MOP_sarw_r_m, {&OpndDesc::Reg8IS, &OpndDesc::Mem16D},ISSHIFT,kLtAlu,"sarw","0,1",1)
287DEFINE_MOP(MOP_sarl_r_m, {&OpndDesc::Reg8IS, &OpndDesc::Mem32D},ISSHIFT,kLtAlu,"sarl","0,1",1)
288DEFINE_MOP(MOP_sarq_r_m, {&OpndDesc::Reg8IS, &OpndDesc::Mem64D},ISSHIFT,kLtAlu,"sarq","0,1",1)
289DEFINE_MOP(MOP_sarb_i_m, {&OpndDesc::Imm8, &OpndDesc::Mem8D},ISSHIFT,kLtAlu,"sarb","0,1",1)
290DEFINE_MOP(MOP_sarw_i_m, {&OpndDesc::Imm8, &OpndDesc::Mem16D},ISSHIFT,kLtAlu,"sarw","0,1",1)
291DEFINE_MOP(MOP_sarl_i_m, {&OpndDesc::Imm8, &OpndDesc::Mem32D},ISSHIFT,kLtAlu,"sarl","0,1",1)
292DEFINE_MOP(MOP_sarq_i_m, {&OpndDesc::Imm8, &OpndDesc::Mem64D},ISSHIFT,kLtAlu,"sarq","0,1",1)
293/* shr */
294DEFINE_MOP(MOP_shrb_r_r, {&OpndDesc::Reg8IS, &OpndDesc::Reg8IDS},ISSHIFT,kLtAlu,"shrb","0,1",1)
295DEFINE_MOP(MOP_shrw_r_r, {&OpndDesc::Reg8IS, &OpndDesc::Reg16IDS},ISSHIFT,kLtAlu,"shrw","0,1",1)
296DEFINE_MOP(MOP_shrl_r_r, {&OpndDesc::Reg8IS, &OpndDesc::Reg32IDS},ISSHIFT,kLtAlu,"shrl","0,1",1)
297DEFINE_MOP(MOP_shrq_r_r, {&OpndDesc::Reg8IS, &OpndDesc::Reg64IDS},ISSHIFT,kLtAlu,"shrq","0,1",1)
298DEFINE_MOP(MOP_shrb_i_r, {&OpndDesc::Imm8, &OpndDesc::Reg8IDS},ISSHIFT,kLtAlu,"shrb","0,1",1)
299DEFINE_MOP(MOP_shrw_i_r, {&OpndDesc::Imm8, &OpndDesc::Reg16IDS},ISSHIFT,kLtAlu,"shrw","0,1",1)
300DEFINE_MOP(MOP_shrl_i_r, {&OpndDesc::Imm8, &OpndDesc::Reg32IDS},ISSHIFT,kLtAlu,"shrl","0,1",1)
301DEFINE_MOP(MOP_shrq_i_r, {&OpndDesc::Imm8, &OpndDesc::Reg64IDS},ISSHIFT,kLtAlu,"shrq","0,1",1)
302DEFINE_MOP(MOP_shrb_r_m, {&OpndDesc::Reg8IS, &OpndDesc::Mem8D},ISSHIFT,kLtAlu,"shrb","0,1",1)
303DEFINE_MOP(MOP_shrw_r_m, {&OpndDesc::Reg8IS, &OpndDesc::Mem16D},ISSHIFT,kLtAlu,"shrw","0,1",1)
304DEFINE_MOP(MOP_shrl_r_m, {&OpndDesc::Reg8IS, &OpndDesc::Mem32D},ISSHIFT,kLtAlu,"shrl","0,1",1)
305DEFINE_MOP(MOP_shrq_r_m, {&OpndDesc::Reg8IS, &OpndDesc::Mem64D},ISSHIFT,kLtAlu,"shrq","0,1",1)
306DEFINE_MOP(MOP_shrb_i_m, {&OpndDesc::Imm8, &OpndDesc::Mem8D},ISSHIFT,kLtAlu,"shrb","0,1",1)
307DEFINE_MOP(MOP_shrw_i_m, {&OpndDesc::Imm8, &OpndDesc::Mem16D},ISSHIFT,kLtAlu,"shrw","0,1",1)
308DEFINE_MOP(MOP_shrl_i_m, {&OpndDesc::Imm8, &OpndDesc::Mem32D},ISSHIFT,kLtAlu,"shrl","0,1",1)
309DEFINE_MOP(MOP_shrq_i_m, {&OpndDesc::Imm8, &OpndDesc::Mem64D},ISSHIFT,kLtAlu,"shrq","0,1",1)
310
311/* idiv, div  -- opnd(use), rax(def,use), rdx(def,use) */
312DEFINE_MOP(MOP_idivw_r, {&OpndDesc::Reg16IS, &OpndDesc::Reg16IDS, &OpndDesc::Reg16IDS},0,kLtAlu,"idivw","0",1)
313DEFINE_MOP(MOP_idivl_r, {&OpndDesc::Reg32IS, &OpndDesc::Reg32IDS, &OpndDesc::Reg32IDS},0,kLtAlu,"idivl","0",1)
314DEFINE_MOP(MOP_idivq_r, {&OpndDesc::Reg64IS, &OpndDesc::Reg64IDS, &OpndDesc::Reg64IDS},0,kLtAlu,"idivq","0",1)
315DEFINE_MOP(MOP_idivw_m, {&OpndDesc::Mem16S, &OpndDesc::Reg16IDS, &OpndDesc::Reg16IDS},0,kLtAlu,"idivw","0",1)
316DEFINE_MOP(MOP_idivl_m, {&OpndDesc::Mem32S, &OpndDesc::Reg32IDS, &OpndDesc::Reg32IDS},0,kLtAlu,"idivl","0",1)
317DEFINE_MOP(MOP_idivq_m, {&OpndDesc::Mem64S, &OpndDesc::Reg64IDS, &OpndDesc::Reg64IDS},0,kLtAlu,"idivq","0",1)
318DEFINE_MOP(MOP_divw_r, {&OpndDesc::Reg16IS, &OpndDesc::Reg16IDS, &OpndDesc::Reg16IDS},0,kLtAlu,"divw","0",1)
319DEFINE_MOP(MOP_divl_r, {&OpndDesc::Reg32IS, &OpndDesc::Reg32IDS, &OpndDesc::Reg32IDS},0,kLtAlu,"divl","0",1)
320DEFINE_MOP(MOP_divq_r, {&OpndDesc::Reg64IS, &OpndDesc::Reg64IDS, &OpndDesc::Reg64IDS},0,kLtAlu,"divq","0",1)
321DEFINE_MOP(MOP_divw_m, {&OpndDesc::Mem16S, &OpndDesc::Reg16IDS, &OpndDesc::Reg16IDS},0,kLtAlu,"divw","0",1)
322DEFINE_MOP(MOP_divl_m, {&OpndDesc::Mem32S, &OpndDesc::Reg32IDS, &OpndDesc::Reg32IDS},0,kLtAlu,"divl","0",1)
323DEFINE_MOP(MOP_divq_m, {&OpndDesc::Mem64S, &OpndDesc::Reg64IDS, &OpndDesc::Reg64IDS},0,kLtAlu,"divq","0",1)
324/* cwd, cdq, cqo  -- rax(def use), rdx(def) */
325DEFINE_MOP(MOP_cwd, {&OpndDesc::Reg16IDS, &OpndDesc::Reg16ID},0,kLtAlu,"cwd","",1)
326DEFINE_MOP(MOP_cdq, {&OpndDesc::Reg32IDS, &OpndDesc::Reg32ID},0,kLtAlu,"cdq","",1)
327DEFINE_MOP(MOP_cqo, {&OpndDesc::Reg64IDS, &OpndDesc::Reg64ID},0,kLtAlu,"cqo","",1)
328
329/* jmp, je, jne */
330DEFINE_MOP(MOP_jmpq_r, {&OpndDesc::Reg64IS},ISUNCONDBRANCH,kLtAlu,"jmp","0",1)
331DEFINE_MOP(MOP_jmpq_m, {&OpndDesc::Mem64S},ISUNCONDBRANCH,kLtAlu,"jmp","0",1)
332DEFINE_MOP(MOP_jmpq_l, {&OpndDesc::Lbl64},ISUNCONDBRANCH,kLtAlu,"jmp","0",1) // ip relative
333
334DEFINE_MOP(MOP_je_l, {&OpndDesc::Lbl64},ISCONDBRANCH,kLtAlu,"je","0",1)
335DEFINE_MOP(MOP_ja_l, {&OpndDesc::Lbl64},ISCONDBRANCH,kLtAlu,"ja","0",1)  // unsigned >
336DEFINE_MOP(MOP_jae_l, {&OpndDesc::Lbl64},ISCONDBRANCH,kLtAlu,"jae","0",1) // unsigned >=
337DEFINE_MOP(MOP_jne_l, {&OpndDesc::Lbl64},ISCONDBRANCH,kLtAlu,"jne","0",1)
338DEFINE_MOP(MOP_jb_l, {&OpndDesc::Lbl64},ISCONDBRANCH,kLtAlu,"jb","0",1)  // unsigned <
339DEFINE_MOP(MOP_jbe_l, {&OpndDesc::Lbl64},ISCONDBRANCH,kLtAlu,"jbe","0",1) // unsigned <=
340DEFINE_MOP(MOP_jg_l, {&OpndDesc::Lbl64},ISCONDBRANCH,kLtAlu,"jg","0",1)  // signed >
341DEFINE_MOP(MOP_jge_l, {&OpndDesc::Lbl64},ISCONDBRANCH,kLtAlu,"jge","0",1) // signed >=
342DEFINE_MOP(MOP_jl_l, {&OpndDesc::Lbl64},ISCONDBRANCH,kLtAlu,"jl","0",1)  // signed <
343DEFINE_MOP(MOP_jle_l, {&OpndDesc::Lbl64},ISCONDBRANCH,kLtAlu,"jle","0",1) // signed <=
344
345/* cmp */
346DEFINE_MOP(MOP_cmpb_r_r, {&OpndDesc::Reg8IS, &OpndDesc::Reg8IS},0,kLtAlu,"cmpb","0,1",1)
347DEFINE_MOP(MOP_cmpb_m_r, {&OpndDesc::Mem8S, &OpndDesc::Reg8IS},0,kLtAlu,"cmpb","0,1",1)
348DEFINE_MOP(MOP_cmpb_i_r, {&OpndDesc::Imm8, &OpndDesc::Reg8IS},0,kLtAlu,"cmpb","0,1",1)
349DEFINE_MOP(MOP_cmpb_r_m, {&OpndDesc::Reg8IS, &OpndDesc::Mem8S},0,kLtAlu,"cmpb","0,1",1)
350DEFINE_MOP(MOP_cmpb_i_m, {&OpndDesc::Imm8, &OpndDesc::Mem8S},0,kLtAlu,"cmpb","0,1",1)
351DEFINE_MOP(MOP_cmpw_r_r, {&OpndDesc::Reg16IS, &OpndDesc::Reg16IS},0,kLtAlu,"cmpw","0,1",1)
352DEFINE_MOP(MOP_cmpw_m_r, {&OpndDesc::Mem16S, &OpndDesc::Reg16IS},0,kLtAlu,"cmpw","0,1",1)
353DEFINE_MOP(MOP_cmpw_i_r, {&OpndDesc::Imm16, &OpndDesc::Reg16IS},0,kLtAlu,"cmpw","0,1",1)
354DEFINE_MOP(MOP_cmpw_r_m, {&OpndDesc::Reg16IS, &OpndDesc::Mem16S},0,kLtAlu,"cmpw","0,1",1)
355DEFINE_MOP(MOP_cmpw_i_m, {&OpndDesc::Imm16, &OpndDesc::Mem16S},0,kLtAlu,"cmpw","0,1",1)
356DEFINE_MOP(MOP_cmpl_r_r, {&OpndDesc::Reg32IS, &OpndDesc::Reg32IS},0,kLtAlu,"cmpl","0,1",1)
357DEFINE_MOP(MOP_cmpl_m_r, {&OpndDesc::Mem32S, &OpndDesc::Reg32IS},0,kLtAlu,"cmpl","0,1",1)
358DEFINE_MOP(MOP_cmpl_i_r, {&OpndDesc::Imm32, &OpndDesc::Reg32IS},0,kLtAlu,"cmpl","0,1",1)
359DEFINE_MOP(MOP_cmpl_r_m, {&OpndDesc::Reg32IS, &OpndDesc::Mem32S},0,kLtAlu,"cmpl","0,1",1)
360DEFINE_MOP(MOP_cmpl_i_m, {&OpndDesc::Imm32, &OpndDesc::Mem32S},0,kLtAlu,"cmpl","0,1",1)
361DEFINE_MOP(MOP_cmpq_r_r, {&OpndDesc::Reg64IS, &OpndDesc::Reg64IS},0,kLtAlu,"cmpq","0,1",1)
362DEFINE_MOP(MOP_cmpq_m_r, {&OpndDesc::Mem64S, &OpndDesc::Reg64IS},0,kLtAlu,"cmpq","0,1",1)
363DEFINE_MOP(MOP_cmpq_i_r, {&OpndDesc::Imm32, &OpndDesc::Reg64IS},0,kLtAlu,"cmpq","0,1",1)
364DEFINE_MOP(MOP_cmpq_r_m, {&OpndDesc::Reg64IS, &OpndDesc::Mem64S},0,kLtAlu,"cmpq","0,1",1)
365DEFINE_MOP(MOP_cmpq_i_m, {&OpndDesc::Imm32, &OpndDesc::Mem64S},0,kLtAlu,"cmpq","0,1",1)
366
367/* test */
368DEFINE_MOP(MOP_testq_r_r, {&OpndDesc::Reg64IS, &OpndDesc::Reg64IS},0,kLtAlu,"testq","0,1",1)
369
370/* setcc -- use ccreg(CF/ZF/SF/OF) */
371DEFINE_MOP(MOP_setbe_r, {&OpndDesc::Reg8ID},0,kLtAlu,"setbe","0",1)
372DEFINE_MOP(MOP_setle_r, {&OpndDesc::Reg8ID},0,kLtAlu,"setle","0",1)
373DEFINE_MOP(MOP_setae_r, {&OpndDesc::Reg8ID},0,kLtAlu,"setae","0",1)
374DEFINE_MOP(MOP_setge_r, {&OpndDesc::Reg8ID},0,kLtAlu,"setge","0",1)
375DEFINE_MOP(MOP_setne_r, {&OpndDesc::Reg8ID},0,kLtAlu,"setne","0",1)
376DEFINE_MOP(MOP_setb_r, {&OpndDesc::Reg8ID},0,kLtAlu,"setb","0",1)
377DEFINE_MOP(MOP_setl_r, {&OpndDesc::Reg8ID},0,kLtAlu,"setl","0",1)
378DEFINE_MOP(MOP_seta_r, {&OpndDesc::Reg8ID},0,kLtAlu,"seta","0",1)
379DEFINE_MOP(MOP_setg_r, {&OpndDesc::Reg8ID},0,kLtAlu,"setg","0",1)
380DEFINE_MOP(MOP_sete_r, {&OpndDesc::Reg8ID},0,kLtAlu,"sete","0",1)
381DEFINE_MOP(MOP_seto_r, {&OpndDesc::Reg8ID},0,kLtAlu,"seto","0",1)
382DEFINE_MOP(MOP_setbe_m, {&OpndDesc::Mem8D},0,kLtAlu,"setbe","0",1)
383DEFINE_MOP(MOP_setle_m, {&OpndDesc::Mem8D},0,kLtAlu,"setle","0",1)
384DEFINE_MOP(MOP_setae_m, {&OpndDesc::Mem8D},0,kLtAlu,"setae","0",1)
385DEFINE_MOP(MOP_setge_m, {&OpndDesc::Mem8D},0,kLtAlu,"setge","0",1)
386DEFINE_MOP(MOP_setne_m, {&OpndDesc::Mem8D},0,kLtAlu,"setne","0",1)
387DEFINE_MOP(MOP_setb_m, {&OpndDesc::Mem8D},0,kLtAlu,"setb","0",1)
388DEFINE_MOP(MOP_setl_m, {&OpndDesc::Mem8D},0,kLtAlu,"setl","0",1)
389DEFINE_MOP(MOP_seta_m, {&OpndDesc::Mem8D},0,kLtAlu,"seta","0",1)
390DEFINE_MOP(MOP_setg_m, {&OpndDesc::Mem8D},0,kLtAlu,"setg","0",1)
391DEFINE_MOP(MOP_sete_m, {&OpndDesc::Mem8D},0,kLtAlu,"sete","0",1)
392DEFINE_MOP(MOP_seto_m, {&OpndDesc::Mem8D},0,kLtAlu,"seto","0",1)
393
394/* cmov */
395/* condition move if below or equal */
396DEFINE_MOP(MOP_cmovbew_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovbew","0,1",1)
397DEFINE_MOP(MOP_cmovbel_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovbel","0,1",1)
398DEFINE_MOP(MOP_cmovbeq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovbeq","0,1",1)
399DEFINE_MOP(MOP_cmovbew_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovbew","0,1",1)
400DEFINE_MOP(MOP_cmovbel_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovbel","0,1",1)
401DEFINE_MOP(MOP_cmovbeq_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovbeq","0,1",1)
402/* condition move if less or equal */
403DEFINE_MOP(MOP_cmovlew_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovlew","0,1",1)
404DEFINE_MOP(MOP_cmovlel_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovlel","0,1",1)
405DEFINE_MOP(MOP_cmovleq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovleq","0,1",1)
406DEFINE_MOP(MOP_cmovlew_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovlew","0,1",1)
407DEFINE_MOP(MOP_cmovlel_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovlel","0,1",1)
408DEFINE_MOP(MOP_cmovleq_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovleq","0,1",1)
409/* condition move if above or equal */
410DEFINE_MOP(MOP_cmovaew_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovaew","0,1",1)
411DEFINE_MOP(MOP_cmovael_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovael","0,1",1)
412DEFINE_MOP(MOP_cmovaeq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovaeq","0,1",1)
413DEFINE_MOP(MOP_cmovaew_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovaew","0,1",1)
414DEFINE_MOP(MOP_cmovael_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovael","0,1",1)
415DEFINE_MOP(MOP_cmovaeq_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovaeq","0,1",1)
416/* condition move if greater or equal */
417DEFINE_MOP(MOP_cmovgew_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovgew","0,1",1)
418DEFINE_MOP(MOP_cmovgel_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovgel","0,1",1)
419DEFINE_MOP(MOP_cmovgeq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovgeq","0,1",1)
420DEFINE_MOP(MOP_cmovgew_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovgew","0,1",1)
421DEFINE_MOP(MOP_cmovgel_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovgel","0,1",1)
422DEFINE_MOP(MOP_cmovgeq_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovgeq","0,1",1)
423/* condition move if not equal */
424DEFINE_MOP(MOP_cmovnew_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovnew","0,1",1)
425DEFINE_MOP(MOP_cmovnel_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovnel","0,1",1)
426DEFINE_MOP(MOP_cmovneq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovneq","0,1",1)
427DEFINE_MOP(MOP_cmovnew_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovnew","0,1",1)
428DEFINE_MOP(MOP_cmovnel_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovnel","0,1",1)
429DEFINE_MOP(MOP_cmovneq_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovneq","0,1",1)
430/* condition move if below */
431DEFINE_MOP(MOP_cmovbw_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovbw","0,1",1)
432DEFINE_MOP(MOP_cmovbl_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovbl","0,1",1)
433DEFINE_MOP(MOP_cmovbq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovbq","0,1",1)
434DEFINE_MOP(MOP_cmovbw_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovbw","0,1",1)
435DEFINE_MOP(MOP_cmovbl_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovbl","0,1",1)
436DEFINE_MOP(MOP_cmovbq_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovbq","0,1",1)
437/* condition move if less */
438DEFINE_MOP(MOP_cmovlw_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovlw","0,1",1)
439DEFINE_MOP(MOP_cmovll_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovll","0,1",1)
440DEFINE_MOP(MOP_cmovlq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovlq","0,1",1)
441DEFINE_MOP(MOP_cmovlw_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovlw","0,1",1)
442DEFINE_MOP(MOP_cmovll_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovll","0,1",1)
443DEFINE_MOP(MOP_cmovlq_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovlq","0,1",1)
444/* condition move if above */
445DEFINE_MOP(MOP_cmovaw_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovaw","0,1",1)
446DEFINE_MOP(MOP_cmoval_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32IDS},0,kLtAlu,"cmoval","0,1",1)
447DEFINE_MOP(MOP_cmovaq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovaq","0,1",1)
448DEFINE_MOP(MOP_cmovaw_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovaw","0,1",1)
449DEFINE_MOP(MOP_cmoval_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg32IDS},0,kLtAlu,"cmoval","0,1",1)
450DEFINE_MOP(MOP_cmovaq_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovaq","0,1",1)
451/* condition move if greater */
452DEFINE_MOP(MOP_cmovgw_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovgw","0,1",1)
453DEFINE_MOP(MOP_cmovgl_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovgl","0,1",1)
454DEFINE_MOP(MOP_cmovgq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovgq","0,1",1)
455DEFINE_MOP(MOP_cmovgw_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovgw","0,1",1)
456DEFINE_MOP(MOP_cmovgl_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovgl","0,1",1)
457DEFINE_MOP(MOP_cmovgq_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovgq","0,1",1)
458/* condition move if equal */
459DEFINE_MOP(MOP_cmovew_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovew","0,1",1)
460DEFINE_MOP(MOP_cmovel_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovel","0,1",1)
461DEFINE_MOP(MOP_cmoveq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64IDS},0,kLtAlu,"cmoveq","0,1",1)
462DEFINE_MOP(MOP_cmovew_m_r, {&OpndDesc::Mem16S,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovew","0,1",1)
463DEFINE_MOP(MOP_cmovel_m_r, {&OpndDesc::Mem32S,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovel","0,1",1)
464DEFINE_MOP(MOP_cmoveq_m_r, {&OpndDesc::Mem64S,&OpndDesc::Reg64IDS},0,kLtAlu,"cmoveq","0,1",1)
465/* condition move if overflow */
466DEFINE_MOP(MOP_cmovow_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg16IDS},0,kLtAlu,"cmovow","0,1",1)
467DEFINE_MOP(MOP_cmovol_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32IDS},0,kLtAlu,"cmovol","0,1",1)
468DEFINE_MOP(MOP_cmovoq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64IDS},0,kLtAlu,"cmovoq","0,1",1)
469
470/* call, ret, leave */
471DEFINE_MOP(MOP_callq_l, {&OpndDesc::Lbl64,&OpndDesc::ListSrc,&OpndDesc::ListDest},ISCALL,kLtAlu,"callq","0",1)
472DEFINE_MOP(MOP_callq_m, {&OpndDesc::Mem64S,&OpndDesc::ListSrc,&OpndDesc::ListDest},ISCALL,kLtAlu,"callq","0",1)
473DEFINE_MOP(MOP_callq_r, {&OpndDesc::Reg64IS,&OpndDesc::ListSrc,&OpndDesc::ListDest},ISCALL,kLtAlu,"callq","0",1)
474DEFINE_MOP(MOP_tail_callq_l, {&OpndDesc::Lbl64,&OpndDesc::ListSrc},ISTAILCALL|ISCALL,kLtAlu,"jmp","0",1)
475DEFINE_MOP(MOP_tail_callq_m, {&OpndDesc::Mem64S,&OpndDesc::ListSrc},ISTAILCALL|ISCALL,kLtAlu,"jmp","0",1)
476DEFINE_MOP(MOP_tail_callq_r, {&OpndDesc::Reg64IS,&OpndDesc::ListSrc},ISTAILCALL|ISCALL,kLtAlu,"jmp","0",1)
477DEFINE_MOP(MOP_pure_call, {&OpndDesc::Reg64IS,&OpndDesc::ListSrc,&OpndDesc::ListDest},ISCALL,kLtAlu,"pure_call","0",1)
478
479DEFINE_MOP(MOP_retq, {},CANTHROW,kLtBranch,"ret","",1)
480
481DEFINE_MOP(MOP_leaveq, {},CANTHROW,kLtBranch,"leave","",1)
482
483/* imul */
484DEFINE_MOP(MOP_imulw_r_r, {&OpndDesc::Reg16IS,&OpndDesc::Reg16IDS},0,kLtAlu,"imulw","0,1",1)
485DEFINE_MOP(MOP_imull_r_r, {&OpndDesc::Reg32IS,&OpndDesc::Reg32IDS},0,kLtAlu,"imull","0,1",1)
486DEFINE_MOP(MOP_imulq_r_r, {&OpndDesc::Reg64IS,&OpndDesc::Reg64IDS},0,kLtAlu,"imulq","0,1",1)
487
488/* mul float */
489DEFINE_MOP(MOP_mulfs_r_r, {&OpndDesc::Reg128FS,&OpndDesc::Reg128FDS},0,kLtAlu,"mulss","0,1",1)
490DEFINE_MOP(MOP_mulfd_r_r, {&OpndDesc::Reg128FS,&OpndDesc::Reg128FDS},0,kLtAlu,"mulsd","0,1",1)
491
492/* nop */
493// TODO: still not clear why we need so many forms of nop (except for patch)
494DEFINE_MOP(MOP_nopb, {&OpndDesc::Mem8S},0,kLtAlu,"nopb","",1)
495DEFINE_MOP(MOP_nopw, {&OpndDesc::Mem16S},0,kLtAlu,"nopw","",1)
496DEFINE_MOP(MOP_nopl, {&OpndDesc::Mem32S},0,kLtAlu,"nopl","",1)
497DEFINE_MOP(MOP_nop, {},0,0,"nop","",1)
498
499/* Byte Swap */
500DEFINE_MOP(MOP_bswapl_r, {&OpndDesc::Reg32IDS},0,kLtAlu,"bswapl","0",1)
501DEFINE_MOP(MOP_bswapq_r, {&OpndDesc::Reg64IDS},0,kLtAlu,"bswapq","0",1)
502
503/* xchg */
504DEFINE_MOP(MOP_xchgb_r_r, {&OpndDesc::Reg8IDS,&OpndDesc::Reg8IDS},0,kLtAlu,"xchgb","0,1",1)
505
506/* invalid operation */
507DEFINE_MOP(MOP_movq_i_m, {&OpndDesc::Imm64,&OpndDesc::Mem64D},0,kLtAlu,"invalid","0,1",1)
508
509/* floating point and */
510DEFINE_MOP(MOP_andd_r_r, {&OpndDesc::Reg128FS, &OpndDesc::Reg128FDS},0,kLtAlu,"andpd","0,1",1)
511DEFINE_MOP(MOP_ands_r_r, {&OpndDesc::Reg128FS, &OpndDesc::Reg128FDS},0,kLtAlu,"andps","0,1",1)
512
513/* floating div */
514DEFINE_MOP(MOP_divsd_r, {&OpndDesc::Reg128FS, &OpndDesc::Reg128FDS},0,kLtAlu,"divsd","0,1",1)
515DEFINE_MOP(MOP_divsd_m, {&OpndDesc::Mem64S, &OpndDesc::Reg128FDS},0,kLtAlu,"divsd","0,1",1)
516
517/* convert int2float */
518DEFINE_MOP(MOP_cvtsi2ssq_r, {&OpndDesc::Reg64IS, &OpndDesc::Reg128FD},0,kLtAlu,"cvtsi2ssq","0,1",1)
519DEFINE_MOP(MOP_cvtsi2ssl_r, {&OpndDesc::Reg32IS, &OpndDesc::Reg128FD},0,kLtAlu,"cvtsi2ssl","0,1",1)
520DEFINE_MOP(MOP_cvtsi2sdq_r, {&OpndDesc::Reg64IS, &OpndDesc::Reg128FD},0,kLtAlu,"cvtsi2sdq","0,1",1)
521DEFINE_MOP(MOP_cvtsi2sdl_r, {&OpndDesc::Reg32IS, &OpndDesc::Reg128FD},0,kLtAlu,"cvtsi2sdl","0,1",1)
522
523/*convert float2int */
524DEFINE_MOP(MOP_cvttsd2siq_r, {&OpndDesc::Reg128FS, &OpndDesc::Reg64ID},0,kLtAlu,"cvttsd2siq","0,1",1)
525DEFINE_MOP(MOP_cvttsd2sil_r, {&OpndDesc::Reg128FS, &OpndDesc::Reg32ID},0,kLtAlu,"cvttsd2sil","0,1",1)
526DEFINE_MOP(MOP_cvttss2siq_r, {&OpndDesc::Reg128FS, &OpndDesc::Reg64ID},0,kLtAlu,"cvttss2siq","0,1",1)
527DEFINE_MOP(MOP_cvttss2sil_r, {&OpndDesc::Reg128FS, &OpndDesc::Reg32ID},0,kLtAlu,"cvttss2sil","0,1",1)
528
529/* convert float2float */
530DEFINE_MOP(MOP_cvtss2sd_r, {&OpndDesc::Reg128FS, &OpndDesc::Reg128FD},0,kLtAlu,"cvtss2sd","0,1",1)
531DEFINE_MOP(MOP_cvtsd2ss_r, {&OpndDesc::Reg128FS, &OpndDesc::Reg128FD},0,kLtAlu,"cvtsd2ss","0,1",1)
532
533DEFINE_MOP(MOP_ucomisd_r_r, {&OpndDesc::Reg128FS,&OpndDesc::Reg128FS},0,kLtAlu,"ucomisd","0,1",1)
534DEFINE_MOP(MOP_cmpeqsd_r_r, {&OpndDesc::Reg128FS,&OpndDesc::Reg128FDS},0,kLtAlu,"cmpeqsd","0,1",1)
535
536/* floating point sqrt */
537DEFINE_MOP(MOP_sqrts_r_r, {&OpndDesc::Reg128FS, &OpndDesc::Reg128FD},0,kLtAlu,"sqrtss","0,1",1)
538DEFINE_MOP(MOP_sqrtd_r_r, {&OpndDesc::Reg128FS, &OpndDesc::Reg128FD},0,kLtAlu,"sqrtsd","0,1",1)
539
540/* intrinsic operation */
541DEFINE_MOP(MOP_heap_const, {&OpndDesc::Reg64ID, &OpndDesc::Reg64IS, &OpndDesc::Imm64},0,kLtAlu,"__heap_constant","0,1,1",1)
542DEFINE_MOP(MOP_get_heap_const_table, {&OpndDesc::Reg64ID, &OpndDesc::Reg64IS, &OpndDesc::Imm64, &OpndDesc::Imm64},0,kLtAlu,"__get_heap_constant_table","0,1,2,3",2)
543DEFINE_MOP(MOP_tagged_is_heapobject, {&OpndDesc::Reg8ID, &OpndDesc::Reg64IS, &OpndDesc::Reg64IS},0,kLtAlu,"__tagged_is_heapobject","0,1,2,3",3)
544DEFINE_MOP(MOP_has_pending_exception, {&OpndDesc::Reg8ID, &OpndDesc::Reg64IS, &OpndDesc::Imm64, &OpndDesc::Imm64},0,kLtAlu,"__has_pending_exception","0,1,2,3",2)
545DEFINE_MOP(MOP_is_stable_elements, {&OpndDesc::Reg32ID, &OpndDesc::Reg64IS, &OpndDesc::Imm32, &OpndDesc::Imm32},0,kLtAlu,"__is_stable_elements","0,1,2,3",2)
546DEFINE_MOP(MOP_tagged_object_is_string, {&OpndDesc::Reg8ID, &OpndDesc::Reg64IS, &OpndDesc::Reg64IS, &OpndDesc::Imm32, &OpndDesc::Imm32, &OpndDesc::Imm32, &OpndDesc::Reg32ID, &OpndDesc::Reg64ID},ISINTRINSIC,kLtAlu,"__tagged_object_is_string","0,1,2,3,4",3)
547DEFINE_MOP(MOP_is_cow_array, {&OpndDesc::Reg8ID, &OpndDesc::Reg64IS, &OpndDesc::Reg64IS, &OpndDesc::Imm32, &OpndDesc::Imm32, &OpndDesc::Imm32, &OpndDesc::Imm32, &OpndDesc::Reg32ID, &OpndDesc::Reg64ID},ISINTRINSIC,kLtAlu,"__is_cow_array","0,1,2,3,4",3)
548
549/* pseudo operation */
550DEFINE_MOP(MOP_pseudo_ret_int, {&OpndDesc::Reg64IS},0,kLtUndef,"//MOP_pseudo_ret_int","", 0)
551/* end of X64 instructions */