@@ -68,7 +68,7 @@ impl Modifier {
68
68
match opcode {
69
69
Mov | Cmp | Seq | Sne => Modifier :: I ,
70
70
Slt => Modifier :: B ,
71
- Add | Sub | Mul | Div | Mod => Modifier :: B ,
71
+ Add | Sub | Mul | Div | Mod => Modifier :: F ,
72
72
_ => unreachable ! ( ) ,
73
73
}
74
74
}
@@ -221,6 +221,7 @@ mod tests {
221
221
use itertools:: iproduct;
222
222
223
223
use super :: * ;
224
+ use Opcode :: * ;
224
225
225
226
#[ test]
226
227
fn default_instruction ( ) {
@@ -241,7 +242,7 @@ mod tests {
241
242
}
242
243
243
244
#[ test]
244
- fn dat_default_88_to_94 ( ) {
245
+ fn dat_default ( ) {
245
246
for ( & a_mode, & b_mode) in iproduct ! ( AddressMode :: iter_values( ) , AddressMode :: iter_values( ) )
246
247
{
247
248
assert_eq ! (
@@ -252,10 +253,9 @@ mod tests {
252
253
}
253
254
254
255
#[ test]
255
- fn modifier_b_default_88_to_94 ( ) {
256
- use Opcode :: * ;
257
-
256
+ fn modifier_b_default ( ) {
258
257
let opcodes = [ Mov , Cmp , Seq , Sne ] ;
258
+
259
259
for ( & opcode, & a_mode) in iproduct ! ( opcodes. iter( ) , AddressMode :: iter_values( ) ) {
260
260
if a_mode != AddressMode :: Immediate {
261
261
assert_eq ! (
@@ -266,14 +266,11 @@ mod tests {
266
266
}
267
267
268
268
let opcodes = [ Add , Sub , Mul , Div , Mod ] ;
269
- for ( & opcode, & a_mode, & b_mode) in iproduct ! (
270
- opcodes. iter( ) ,
271
- AddressMode :: iter_values( ) ,
272
- AddressMode :: iter_values( )
273
- ) {
269
+
270
+ for ( & opcode, & a_mode) in iproduct ! ( opcodes. iter( ) , AddressMode :: iter_values( ) ) {
274
271
if a_mode != AddressMode :: Immediate {
275
272
assert_eq ! (
276
- Modifier :: default_88_to_94( opcode, a_mode, b_mode ) ,
273
+ Modifier :: default_88_to_94( opcode, a_mode, AddressMode :: Immediate ) ,
277
274
Modifier :: B
278
275
) ;
279
276
}
@@ -290,6 +287,7 @@ mod tests {
290
287
}
291
288
292
289
let opcodes = [ Jmp , Jmz , Jmn , Djn , Spl , Nop ] ;
290
+
293
291
for ( & opcode, & a_mode, & b_mode) in iproduct ! (
294
292
opcodes. iter( ) ,
295
293
AddressMode :: iter_values( ) ,
@@ -303,9 +301,7 @@ mod tests {
303
301
}
304
302
305
303
#[ test]
306
- fn modifier_ab_default_88_to_94 ( ) {
307
- use Opcode :: * ;
308
-
304
+ fn modifier_ab_default ( ) {
309
305
let opcodes = [ Mov , Cmp , Seq , Sne , Add , Sub , Mul , Div , Mod , Slt ] ;
310
306
311
307
for ( & opcode, & b_mode) in iproduct ! ( opcodes. iter( ) , AddressMode :: iter_values( ) ) {
@@ -316,5 +312,39 @@ mod tests {
316
312
}
317
313
}
318
314
319
- // TODO Mode I
315
+ #[ test]
316
+ fn modifier_i_default ( ) {
317
+ let opcodes = [ Mov , Cmp , Seq , Sne ] ;
318
+
319
+ for ( & opcode, & a_mode, & b_mode) in iproduct ! (
320
+ opcodes. iter( ) ,
321
+ AddressMode :: iter_values( ) ,
322
+ AddressMode :: iter_values( )
323
+ ) {
324
+ if a_mode != AddressMode :: Immediate && b_mode != AddressMode :: Immediate {
325
+ assert_eq ! (
326
+ Modifier :: default_88_to_94( opcode, a_mode, b_mode) ,
327
+ Modifier :: I
328
+ ) ;
329
+ }
330
+ }
331
+ }
332
+
333
+ #[ test]
334
+ fn modifier_f_default ( ) {
335
+ let opcodes = [ Add , Sub , Mul , Div , Mod ] ;
336
+
337
+ for ( & opcode, & a_mode, & b_mode) in iproduct ! (
338
+ opcodes. iter( ) ,
339
+ AddressMode :: iter_values( ) ,
340
+ AddressMode :: iter_values( )
341
+ ) {
342
+ if a_mode != AddressMode :: Immediate && b_mode != AddressMode :: Immediate {
343
+ assert_eq ! (
344
+ Modifier :: default_88_to_94( opcode, a_mode, b_mode) ,
345
+ Modifier :: F
346
+ ) ;
347
+ }
348
+ }
349
+ }
320
350
}
0 commit comments