@@ -67,19 +67,33 @@ class BinaryVectorInstruction(base.Instruction):
6767 def copy (self , size , subs ):
6868 return type (self )(* self .get_new_args (size , subs ))
6969
70+ class NonVectorInstruction (base .Instruction ):
71+ is_vec = lambda self : False
72+
73+ def __init__ (self , * args , ** kwargs ):
74+ assert (args [0 ].n <= args [0 ].unit )
75+ super (NonVectorInstruction , self ).__init__ (* args , ** kwargs )
76+
77+ class NonVectorInstruction1 (base .Instruction ):
78+ is_vec = lambda self : False
79+
80+ def __init__ (self , * args , ** kwargs ):
81+ assert (args [1 ].n <= args [1 ].unit )
82+ super (NonVectorInstruction1 , self ).__init__ (* args , ** kwargs )
83+
7084class xors (BinaryVectorInstruction ):
7185 code = opcodes ['XORS' ]
7286 arg_format = tools .cycle (['int' ,'sbw' ,'sb' ,'sb' ])
7387
74- class xorm (base . Instruction ):
88+ class xorm (NonVectorInstruction ):
7589 code = opcodes ['XORM' ]
7690 arg_format = ['int' ,'sbw' ,'sb' ,'cb' ]
7791
78- class xorcb (base . Instruction ):
92+ class xorcb (NonVectorInstruction ):
7993 code = opcodes ['XORCB' ]
8094 arg_format = ['cbw' ,'cb' ,'cb' ]
8195
82- class xorcbi (base . Instruction ):
96+ class xorcbi (NonVectorInstruction ):
8397 code = opcodes ['XORCBI' ]
8498 arg_format = ['cbw' ,'cb' ,'int' ]
8599
@@ -101,67 +115,69 @@ class andm(BinaryVectorInstruction):
101115 code = opcodes ['ANDM' ]
102116 arg_format = ['int' ,'sbw' ,'sb' ,'cb' ]
103117
104- class addcb (base . Instruction ):
118+ class addcb (NonVectorInstruction ):
105119 code = opcodes ['ADDCB' ]
106120 arg_format = ['cbw' ,'cb' ,'cb' ]
107121
108- class addcbi (base . Instruction ):
122+ class addcbi (NonVectorInstruction ):
109123 code = opcodes ['ADDCBI' ]
110124 arg_format = ['cbw' ,'cb' ,'int' ]
111125
112- class mulcbi (base . Instruction ):
126+ class mulcbi (NonVectorInstruction ):
113127 code = opcodes ['MULCBI' ]
114128 arg_format = ['cbw' ,'cb' ,'int' ]
115129
116- class bitdecs (base .VarArgsInstruction ):
130+ class bitdecs (NonVectorInstruction , base .VarArgsInstruction ):
117131 code = opcodes ['BITDECS' ]
118132 arg_format = tools .chain (['sb' ], itertools .repeat ('sbw' ))
119133
120- class bitcoms (base .VarArgsInstruction ):
134+ class bitcoms (NonVectorInstruction , base .VarArgsInstruction ):
121135 code = opcodes ['BITCOMS' ]
122136 arg_format = tools .chain (['sbw' ], itertools .repeat ('sb' ))
123137
124- class bitdecc (base .VarArgsInstruction ):
138+ class bitdecc (NonVectorInstruction , base .VarArgsInstruction ):
125139 code = opcodes ['BITDECC' ]
126140 arg_format = tools .chain (['cb' ], itertools .repeat ('cbw' ))
127141
128- class shrcbi (base . Instruction ):
142+ class shrcbi (NonVectorInstruction ):
129143 code = opcodes ['SHRCBI' ]
130144 arg_format = ['cbw' ,'cb' ,'int' ]
131145
132- class shlcbi (base . Instruction ):
146+ class shlcbi (NonVectorInstruction ):
133147 code = opcodes ['SHLCBI' ]
134148 arg_format = ['cbw' ,'cb' ,'int' ]
135149
136- class ldbits (base . Instruction ):
150+ class ldbits (NonVectorInstruction ):
137151 code = opcodes ['LDBITS' ]
138152 arg_format = ['sbw' ,'i' ,'i' ]
139153
140- class ldmsb (base .DirectMemoryInstruction , base .ReadMemoryInstruction ):
154+ class ldmsb (base .DirectMemoryInstruction , base .ReadMemoryInstruction ,
155+ base .VectorInstruction ):
141156 code = opcodes ['LDMSB' ]
142157 arg_format = ['sbw' ,'int' ]
143158
144- class stmsb (base .DirectMemoryWriteInstruction ):
159+ class stmsb (base .DirectMemoryWriteInstruction , base . VectorInstruction ):
145160 code = opcodes ['STMSB' ]
146161 arg_format = ['sb' ,'int' ]
147162 # def __init__(self, *args, **kwargs):
148163 # super(type(self), self).__init__(*args, **kwargs)
149164 # import inspect
150165 # self.caller = [frame[1:] for frame in inspect.stack()[1:]]
151166
152- class ldmcb (base .DirectMemoryInstruction , base .ReadMemoryInstruction ):
167+ class ldmcb (base .DirectMemoryInstruction , base .ReadMemoryInstruction ,
168+ base .VectorInstruction ):
153169 code = opcodes ['LDMCB' ]
154170 arg_format = ['cbw' ,'int' ]
155171
156- class stmcb (base .DirectMemoryWriteInstruction ):
172+ class stmcb (base .DirectMemoryWriteInstruction , base . VectorInstruction ):
157173 code = opcodes ['STMCB' ]
158174 arg_format = ['cb' ,'int' ]
159175
160- class ldmsbi (base .ReadMemoryInstruction ):
176+ class ldmsbi (base .ReadMemoryInstruction , base . VectorInstruction ):
161177 code = opcodes ['LDMSBI' ]
162178 arg_format = ['sbw' ,'ci' ]
163179
164- class stmsbi (base .WriteMemoryInstruction ):
180+ class stmsbi (base .WriteMemoryInstruction , base . VectorInstruction ):
165181 code = opcodes ['STMSBI' ]
166182 arg_format = ['sb' ,'ci' ]
167183
@@ -185,15 +201,15 @@ class stmsdci(base.WriteMemoryInstruction):
185201 code = opcodes ['STMSDCI' ]
186202 arg_format = tools .cycle (['cb' ,'cb' ])
187203
188- class convsint (base . Instruction ):
204+ class convsint (NonVectorInstruction1 ):
189205 code = opcodes ['CONVSINT' ]
190206 arg_format = ['int' ,'sbw' ,'ci' ]
191207
192- class convcint (base . Instruction ):
208+ class convcint (NonVectorInstruction ):
193209 code = opcodes ['CONVCINT' ]
194210 arg_format = ['cbw' ,'ci' ]
195211
196- class convcbit (base . Instruction ):
212+ class convcbit (NonVectorInstruction1 ):
197213 code = opcodes ['CONVCBIT' ]
198214 arg_format = ['ciw' ,'cb' ]
199215
@@ -222,18 +238,19 @@ def __init__(self, *args, **kwargs):
222238 super (split_class , self ).__init__ (* args , ** kwargs )
223239 assert (len (args ) - 2 ) % args [0 ] == 0
224240
225- class movsb (base . Instruction ):
241+ class movsb (NonVectorInstruction ):
226242 code = opcodes ['MOVSB' ]
227243 arg_format = ['sbw' ,'sb' ]
228244
229245class trans (base .VarArgsInstruction ):
230246 code = opcodes ['TRANS' ]
247+ is_vec = lambda self : True
231248 def __init__ (self , * args ):
232249 self .arg_format = ['int' ] + ['sbw' ] * args [0 ] + \
233250 ['sb' ] * (len (args ) - 1 - args [0 ])
234251 super (trans , self ).__init__ (* args )
235252
236- class bitb (base . Instruction ):
253+ class bitb (NonVectorInstruction ):
237254 code = opcodes ['BITB' ]
238255 arg_format = ['sbw' ]
239256
@@ -245,20 +262,22 @@ class inputb(base.DoNotEliminateInstruction, base.VarArgsInstruction):
245262 __slots__ = []
246263 code = opcodes ['INPUTB' ]
247264 arg_format = tools .cycle (['p' ,'int' ,'int' ,'sbw' ])
265+ is_vec = lambda self : True
248266
249- class print_regb (base .IOInstruction ):
267+ class print_regb (base .VectorInstruction , base . IOInstruction ):
250268 code = opcodes ['PRINTREGB' ]
251269 arg_format = ['cb' ,'i' ]
252270 def __init__ (self , reg , comment = '' ):
253271 super (print_regb , self ).__init__ (reg , self .str_to_int (comment ))
254272
255- class print_reg_plainb (base .IOInstruction ):
273+ class print_reg_plainb (NonVectorInstruction , base .IOInstruction ):
256274 code = opcodes ['PRINTREGPLAINB' ]
257275 arg_format = ['cb' ]
258276
259277class print_reg_signed (base .IOInstruction ):
260278 code = opcodes ['PRINTREGSIGNED' ]
261279 arg_format = ['int' ,'cb' ]
280+ is_vec = lambda self : True
262281
263282class print_float_plainb (base .IOInstruction ):
264283 __slots__ = []
0 commit comments