OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gdb/] [gdb-6.8/] [sim/] [testsuite/] [sim/] [h8300/] [movl.s] - Blame information for rev 26

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 26 jlechner
# Hitachi H8 testcase 'mov.l'
2
# mach(): h8300h h8300s h8sx
3
# as(h8300h):   --defsym sim_cpu=1
4
# as(h8300s):   --defsym sim_cpu=2
5
# as(h8sx):     --defsym sim_cpu=3
6
# ld(h8300h):   -m h8300helf
7
# ld(h8300s):   -m h8300self
8
# ld(h8sx):     -m h8300sxelf
9
 
10
        .include "testutils.inc"
11
 
12
        start
13
 
14
        .data
15
        .align  4
16
long_src:
17
        .long   0x77777777
18
long_dst:
19
        .long   0
20
 
21
        .text
22
 
23
        ;;
24
        ;; Move long from immediate source
25
        ;; 
26
 
27
.if (sim_cpu == h8sx)
28
mov_l_imm3_to_reg32:
29
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
30
        set_ccr_zero
31
 
32
        ;; mov.l #xx:3, erd
33
        mov.l   #0x3:3, er0     ; Immediate 3-bit operand
34
;;;     .word   0x0fb8
35
 
36
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
37
        test_neg_clear
38
        test_zero_clear
39
        test_ovf_clear
40
        test_carry_clear
41
 
42
        test_h_gr32 0x3 er0
43
 
44
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
45
        test_gr_a5a5 2
46
        test_gr_a5a5 3
47
        test_gr_a5a5 4
48
        test_gr_a5a5 5
49
        test_gr_a5a5 6
50
        test_gr_a5a5 7
51
 
52
mov_l_imm16_to_reg32:
53
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
54
        set_ccr_zero
55
 
56
        ;; mov.l #xx:16, erd
57
        mov.l   #0x1234, er0    ; Immediate 16-bit operand
58
;;;     .word   0x7a08
59
;;;     .word   0x1234
60
 
61
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
62
        test_neg_clear
63
        test_zero_clear
64
        test_ovf_clear
65
        test_carry_clear
66
 
67
        test_h_gr32 0x1234 er0
68
 
69
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
70
        test_gr_a5a5 2
71
        test_gr_a5a5 3
72
        test_gr_a5a5 4
73
        test_gr_a5a5 5
74
        test_gr_a5a5 6
75
        test_gr_a5a5 7
76
.endif
77
 
78
mov_l_imm32_to_reg32:
79
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
80
        set_ccr_zero
81
 
82
        ;; mov.l #xx:32, erd
83
        mov.l   #0x12345678, er0        ; Immediate 32-bit operand
84
;;;     .word   0x7a00
85
;;;     .long   0x12345678
86
 
87
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
88
        test_neg_clear
89
        test_zero_clear
90
        test_ovf_clear
91
        test_carry_clear
92
 
93
        test_h_gr32 0x12345678 er0
94
 
95
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
96
        test_gr_a5a5 2
97
        test_gr_a5a5 3
98
        test_gr_a5a5 4
99
        test_gr_a5a5 5
100
        test_gr_a5a5 6
101
        test_gr_a5a5 7
102
 
103
.if (sim_cpu == h8sx)
104
mov_l_imm8_to_indirect:
105
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
106
        set_ccr_zero
107
 
108
        ;; mov.l #xx:8, @erd
109
        mov.l   #long_dst, er1
110
        mov.l   #0xa5:8, @er1   ; Register indirect operand
111
;;;     .word   0x010d
112
;;;     .word   0x01a5
113
 
114
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
115
        test_neg_clear
116
        test_zero_clear
117
        test_ovf_clear
118
        test_carry_clear
119
 
120
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
121
        test_h_gr32     long_dst, er1
122
        test_gr_a5a5 2
123
        test_gr_a5a5 3
124
        test_gr_a5a5 4
125
        test_gr_a5a5 5
126
        test_gr_a5a5 6
127
        test_gr_a5a5 7
128
 
129
        ;; Now check the result of the move to memory.
130
        cmp.l   #0xa5, @long_dst
131
        beq     .Lnext1
132
        fail
133
.Lnext1:
134
        mov.l   #0, @long_dst    ; zero it again for the next use.
135
 
136
mov_l_imm8_to_postinc:          ; post-increment from imm8 to mem
137
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
138
        set_ccr_zero
139
 
140
        ;; mov.l #xx:8, @erd+
141
        mov.l   #long_dst, er1
142
        mov.l   #0xa5:8, @er1+  ; Imm8, register post-incr operands.
143
;;;     .word   0x010d
144
;;;     .word   0x81a5
145
 
146
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
147
        test_neg_clear
148
        test_zero_clear
149
        test_ovf_clear
150
        test_carry_clear
151
 
152
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
153
        test_h_gr32     long_dst+4, er1
154
        test_gr_a5a5 2
155
        test_gr_a5a5 3
156
        test_gr_a5a5 4
157
        test_gr_a5a5 5
158
        test_gr_a5a5 6
159
        test_gr_a5a5 7
160
 
161
        ;; Now check the result of the move to memory.
162
        cmp.l   #0xa5, @long_dst
163
        beq     .Lnext2
164
        fail
165
.Lnext2:
166
        mov.l   #0, @long_dst    ; zero it again for the next use.
167
 
168
mov_l_imm8_to_postdec:          ; post-decrement from imm8 to mem
169
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
170
        set_ccr_zero
171
 
172
        ;; mov.l #xx:8, @erd-
173
        mov.l   #long_dst, er1
174
        mov.l   #0xa5:8, @er1-  ; Imm8, register post-decr operands.
175
;;;     .word   0x010d
176
;;;     .word   0xa1a5
177
 
178
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
179
        test_neg_clear
180
        test_zero_clear
181
        test_ovf_clear
182
        test_carry_clear
183
 
184
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
185
        test_h_gr32     long_dst-4, er1
186
        test_gr_a5a5 2
187
        test_gr_a5a5 3
188
        test_gr_a5a5 4
189
        test_gr_a5a5 5
190
        test_gr_a5a5 6
191
        test_gr_a5a5 7
192
 
193
        ;; Now check the result of the move to memory.
194
        cmp.l   #0xa5, @long_dst
195
        beq     .Lnext3
196
        fail
197
.Lnext3:
198
        mov.l   #0, @long_dst    ; zero it again for the next use.
199
 
200
mov_l_imm8_to_preinc:           ; pre-increment from register to mem
201
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
202
        set_ccr_zero
203
 
204
        ;; mov.l #xx:8, @+erd
205
        mov.l   #long_dst-4, er1
206
        mov.l   #0xa5:8, @+er1  ; Imm8, register pre-incr operands
207
;;;     .word   0x010d
208
;;;     .word   0x91a5
209
 
210
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
211
        test_neg_clear
212
        test_zero_clear
213
        test_ovf_clear
214
        test_carry_clear
215
 
216
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
217
        test_h_gr32     long_dst, er1
218
        test_gr_a5a5 2
219
        test_gr_a5a5 3
220
        test_gr_a5a5 4
221
        test_gr_a5a5 5
222
        test_gr_a5a5 6
223
        test_gr_a5a5 7
224
 
225
        ;; Now check the result of the move to memory.
226
        cmp.l   #0xa5, @long_dst
227
        beq     .Lnext4
228
        fail
229
.Lnext4:
230
        mov.l   #0, @long_dst    ; zero it again for the next use.
231
 
232
mov_l_imm8_to_predec:           ; pre-decrement from register to mem
233
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
234
        set_ccr_zero
235
 
236
        ;; mov.l #xx:8, @-erd
237
        mov.l   #long_dst+4, er1
238
        mov.l   #0xa5:8, @-er1  ; Imm8, register pre-decr operands
239
;;;     .word   0x010d
240
;;;     .word   0xb1a5
241
 
242
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
243
        test_neg_clear
244
        test_zero_clear
245
        test_ovf_clear
246
        test_carry_clear
247
 
248
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
249
        test_h_gr32     long_dst, er1
250
        test_gr_a5a5 2
251
        test_gr_a5a5 3
252
        test_gr_a5a5 4
253
        test_gr_a5a5 5
254
        test_gr_a5a5 6
255
        test_gr_a5a5 7
256
 
257
        ;; Now check the result of the move to memory.
258
        cmp.l   #0xa5, @long_dst
259
        beq     .Lnext5
260
        fail
261
.Lnext5:
262
        mov.l   #0, @long_dst    ; zero it again for the next use.
263
 
264
mov_l_imm8_to_disp2:
265
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
266
        set_ccr_zero
267
 
268
        ;; mov.l #xx:8, @(dd:2, erd)
269
        mov.l   #long_dst-12, er1
270
        mov.l   #0xa5:8, @(12:2, er1)   ; Imm8, reg plus 2-bit disp. operand
271
;;;     .word   0x010d
272
;;;     .word   0x31a5
273
 
274
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
275
        test_neg_clear
276
        test_zero_clear
277
        test_ovf_clear
278
        test_carry_clear
279
 
280
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
281
        test_h_gr32     long_dst-12, er1
282
        test_gr_a5a5 2
283
        test_gr_a5a5 3
284
        test_gr_a5a5 4
285
        test_gr_a5a5 5
286
        test_gr_a5a5 6
287
        test_gr_a5a5 7
288
 
289
        ;; Now check the result of the move to memory.
290
        cmp.l   #0xa5, @long_dst
291
        beq     .Lnext6
292
        fail
293
.Lnext6:
294
        mov.l   #0, @long_dst    ; zero it again for the next use.
295
 
296
mov_l_imm8_to_disp16:
297
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
298
        set_ccr_zero
299
 
300
        ;; mov.l #xx:8, @(dd:16, erd)
301
        mov.l   #long_dst-4, er1
302
        mov.l   #0xa5:8, @(4:16, er1)   ; Register plus 16-bit disp. operand
303
;;;     .word   0x010d
304
;;;     .word   0x6f90
305
;;;     .word   0x0004
306
 
307
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
308
        test_neg_clear
309
        test_zero_clear
310
        test_ovf_clear
311
        test_carry_clear
312
 
313
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
314
        test_h_gr32     long_dst-4, er1
315
        test_gr_a5a5 2
316
        test_gr_a5a5 3
317
        test_gr_a5a5 4
318
        test_gr_a5a5 5
319
        test_gr_a5a5 6
320
        test_gr_a5a5 7
321
 
322
        ;; Now check the result of the move to memory.
323
        cmp.l   #0xa5, @long_dst
324
        beq     .Lnext7
325
        fail
326
.Lnext7:
327
        mov.l   #0, @long_dst    ; zero it again for the next use.
328
 
329
mov_l_imm8_to_disp32:
330
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
331
        set_ccr_zero
332
 
333
        ;; mov.l #xx:8, @(dd:32, erd)
334
        mov.l   #long_dst-8, er1
335
        mov.l   #0xa5:8, @(8:32, er1)   ; Register plus 32-bit disp. operand
336
;;;     .word   0x010d
337
;;;     .word   0xc9a5
338
;;;     .long   8
339
 
340
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
341
        test_neg_clear
342
        test_zero_clear
343
        test_ovf_clear
344
        test_carry_clear
345
 
346
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
347
        test_h_gr32     long_dst-8, er1
348
        test_gr_a5a5 2
349
        test_gr_a5a5 3
350
        test_gr_a5a5 4
351
        test_gr_a5a5 5
352
        test_gr_a5a5 6
353
        test_gr_a5a5 7
354
 
355
        ;; Now check the result of the move to memory.
356
        cmp.l   #0xa5, @long_dst
357
        beq     .Lnext8
358
        fail
359
.Lnext8:
360
        mov.l   #0, @long_dst    ; zero it again for the next use.
361
 
362
mov_l_imm8_to_abs16:
363
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
364
        set_ccr_zero
365
 
366
        ;; mov.l #xx:8, @aa:16
367
        mov.l   #0xa5:8, @long_dst:16   ; 16-bit address-direct operand
368
;;;     .word   0x010d
369
;;;     .word   0x40a5
370
;;;     .word   @long_dst
371
 
372
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
373
        test_neg_clear
374
        test_zero_clear
375
        test_ovf_clear
376
        test_carry_clear
377
 
378
        test_gr_a5a5 0           ; Make sure _ALL_ general regs not disturbed
379
        test_gr_a5a5 1          ; (first, because on h8/300 we must use one
380
        test_gr_a5a5 2          ; to examine the destination memory).
381
        test_gr_a5a5 3
382
        test_gr_a5a5 4
383
        test_gr_a5a5 5
384
        test_gr_a5a5 6
385
        test_gr_a5a5 7
386
 
387
        ;; Now check the result of the move to memory.
388
        cmp.l   #0xa5, @long_dst
389
        beq     .Lnext9
390
        fail
391
.Lnext9:
392
        mov.l   #0, @long_dst    ; zero it again for the next use.
393
 
394
mov_l_imm8_to_abs32:
395
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
396
        set_ccr_zero
397
 
398
        ;; mov.l #xx:8, @aa:32
399
        mov.l   #0xa5:8, @long_dst:32   ; 32-bit address-direct operand
400
;;;     .word   0x010d
401
;;;     .word   0x48a5
402
;;;     .long   @long_dst
403
 
404
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
405
        test_neg_clear
406
        test_zero_clear
407
        test_ovf_clear
408
        test_carry_clear
409
 
410
        test_gr_a5a5 0           ; Make sure _ALL_ general regs not disturbed
411
        test_gr_a5a5 1          ; (first, because on h8/300 we must use one
412
        test_gr_a5a5 2          ; to examine the destination memory).
413
        test_gr_a5a5 3
414
        test_gr_a5a5 4
415
        test_gr_a5a5 5
416
        test_gr_a5a5 6
417
        test_gr_a5a5 7
418
 
419
        ;; Now check the result of the move to memory.
420
        cmp.l   #0xa5, @long_dst
421
        beq     .Lnext10
422
        fail
423
.Lnext10:
424
        mov.l   #0, @long_dst    ; zero it again for the next use.
425
 
426
mov_l_imm16_to_indirect:
427
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
428
        set_ccr_zero
429
 
430
        ;; mov.l #xx:16, @erd
431
        mov.l   #long_dst, er1
432
        mov.l   #0xdead:16, @er1        ; Register indirect operand
433
;;;     .word   0x7a7c
434
;;;     .word   0xdead
435
;;;     .word   0x0100
436
 
437
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
438
        test_neg_clear
439
        test_zero_clear
440
        test_ovf_clear
441
        test_carry_clear
442
 
443
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
444
        test_h_gr32     long_dst, er1
445
        test_gr_a5a5 2
446
        test_gr_a5a5 3
447
        test_gr_a5a5 4
448
        test_gr_a5a5 5
449
        test_gr_a5a5 6
450
        test_gr_a5a5 7
451
 
452
        ;; Now check the result of the move to memory.
453
        cmp.l   #0xdead, @long_dst
454
        beq     .Lnext11
455
        fail
456
.Lnext11:
457
        mov.l   #0, @long_dst    ; zero it again for the next use.
458
 
459
mov_l_imm16_to_postinc:         ; post-increment from imm16 to mem
460
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
461
        set_ccr_zero
462
 
463
        ;; mov.l #xx:16, @erd+
464
        mov.l   #long_dst, er1
465
        mov.l   #0xdead:16, @er1+       ; Imm16, register post-incr operands.
466
;;;     .word   0x7a7c
467
;;;     .word   0xdead
468
;;;     .word   0x8100
469
 
470
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
471
        test_neg_clear
472
        test_zero_clear
473
        test_ovf_clear
474
        test_carry_clear
475
 
476
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
477
        test_h_gr32     long_dst+4, er1
478
        test_gr_a5a5 2
479
        test_gr_a5a5 3
480
        test_gr_a5a5 4
481
        test_gr_a5a5 5
482
        test_gr_a5a5 6
483
        test_gr_a5a5 7
484
 
485
        ;; Now check the result of the move to memory.
486
        cmp.l   #0xdead, @long_dst
487
        beq     .Lnext12
488
        fail
489
.Lnext12:
490
        mov.l   #0, @long_dst    ; zero it again for the next use.
491
 
492
mov_l_imm16_to_postdec:         ; post-decrement from imm16 to mem
493
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
494
        set_ccr_zero
495
 
496
        ;; mov.l #xx:16, @erd-
497
        mov.l   #long_dst, er1
498
        mov.l   #0xdead:16, @er1-       ; Imm16, register post-decr operands.
499
;;;     .word   0x7a7c
500
;;;     .word   0xdead
501
;;;     .word   0xa100
502
 
503
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
504
        test_neg_clear
505
        test_zero_clear
506
        test_ovf_clear
507
        test_carry_clear
508
 
509
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
510
        test_h_gr32     long_dst-4, er1
511
        test_gr_a5a5 2
512
        test_gr_a5a5 3
513
        test_gr_a5a5 4
514
        test_gr_a5a5 5
515
        test_gr_a5a5 6
516
        test_gr_a5a5 7
517
 
518
        ;; Now check the result of the move to memory.
519
        cmp.l   #0xdead, @long_dst
520
        beq     .Lnext13
521
        fail
522
.Lnext13:
523
        mov.l   #0, @long_dst    ; zero it again for the next use.
524
 
525
mov_l_imm16_to_preinc:          ; pre-increment from register to mem
526
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
527
        set_ccr_zero
528
 
529
        ;; mov.l #xx:16, @+erd
530
        mov.l   #long_dst-4, er1
531
        mov.l   #0xdead:16, @+er1       ; Imm16, register pre-incr operands
532
;;;     .word   0x7a7c
533
;;;     .word   0xdead
534
;;;     .word   0x9100
535
 
536
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
537
        test_neg_clear
538
        test_zero_clear
539
        test_ovf_clear
540
        test_carry_clear
541
 
542
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
543
        test_h_gr32     long_dst, er1
544
        test_gr_a5a5 2
545
        test_gr_a5a5 3
546
        test_gr_a5a5 4
547
        test_gr_a5a5 5
548
        test_gr_a5a5 6
549
        test_gr_a5a5 7
550
 
551
        ;; Now check the result of the move to memory.
552
        cmp.l   #0xdead, @long_dst
553
        beq     .Lnext14
554
        fail
555
.Lnext14:
556
        mov.l   #0, @long_dst    ; zero it again for the next use.
557
 
558
mov_l_imm16_to_predec:          ; pre-decrement from register to mem
559
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
560
        set_ccr_zero
561
 
562
        ;; mov.l #xx:16, @-erd
563
        mov.l   #long_dst+4, er1
564
        mov.l   #0xdead:16, @-er1       ; Imm16, register pre-decr operands
565
;;;     .word   0x7a7c
566
;;;     .word   0xdead
567
;;;     .word   0xb100
568
 
569
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
570
        test_neg_clear
571
        test_zero_clear
572
        test_ovf_clear
573
        test_carry_clear
574
 
575
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
576
        test_h_gr32     long_dst, er1
577
        test_gr_a5a5 2
578
        test_gr_a5a5 3
579
        test_gr_a5a5 4
580
        test_gr_a5a5 5
581
        test_gr_a5a5 6
582
        test_gr_a5a5 7
583
 
584
        ;; Now check the result of the move to memory.
585
        cmp.l   #0xdead, @long_dst
586
        beq     .Lnext15
587
        fail
588
.Lnext15:
589
        mov.l   #0, @long_dst    ; zero it again for the next use.
590
 
591
mov_l_imm16_to_disp2:
592
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
593
        set_ccr_zero
594
 
595
        ;; mov.l #xx:16, @(dd:2, erd)
596
        mov.l   #long_dst-12, er1
597
        mov.l   #0xdead:16, @(12:2, er1)        ; Imm16, reg plus 2-bit disp. operand
598
;;;     .word   0x7a7c
599
;;;     .word   0xdead
600
;;;     .word   0x3100
601
 
602
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
603
        test_neg_clear
604
        test_zero_clear
605
        test_ovf_clear
606
        test_carry_clear
607
 
608
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
609
        test_h_gr32     long_dst-12, er1
610
        test_gr_a5a5 2
611
        test_gr_a5a5 3
612
        test_gr_a5a5 4
613
        test_gr_a5a5 5
614
        test_gr_a5a5 6
615
        test_gr_a5a5 7
616
 
617
        ;; Now check the result of the move to memory.
618
        cmp.l   #0xdead, @long_dst
619
        beq     .Lnext16
620
        fail
621
.Lnext16:
622
        mov.l   #0, @long_dst    ; zero it again for the next use.
623
 
624
mov_l_imm16_to_disp16:
625
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
626
        set_ccr_zero
627
 
628
        ;; mov.l #xx:16, @(dd:16, erd)
629
        mov.l   #long_dst-4, er1
630
        mov.l   #0xdead:16, @(4:16, er1)        ; Register plus 16-bit disp. operand
631
;;;     .word   0x7a7c
632
;;;     .word   0xdead
633
;;;     .word   0xc100
634
;;;     .word   0x0004
635
 
636
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
637
        test_neg_clear
638
        test_zero_clear
639
        test_ovf_clear
640
        test_carry_clear
641
 
642
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
643
        test_h_gr32     long_dst-4, er1
644
        test_gr_a5a5 2
645
        test_gr_a5a5 3
646
        test_gr_a5a5 4
647
        test_gr_a5a5 5
648
        test_gr_a5a5 6
649
        test_gr_a5a5 7
650
 
651
        ;; Now check the result of the move to memory.
652
        cmp.l   #0xdead, @long_dst
653
        beq     .Lnext17
654
        fail
655
.Lnext17:
656
        mov.l   #0, @long_dst    ; zero it again for the next use.
657
 
658
mov_l_imm16_to_disp32:
659
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
660
        set_ccr_zero
661
 
662
        ;; mov.l #xx:16, @(dd:32, erd)
663
        mov.l   #long_dst-8, er1
664
        mov.l   #0xdead:16, @(8:32, er1)   ; Register plus 32-bit disp. operand
665
;;;     .word   0x7a7c
666
;;;     .word   0xdead
667
;;;     .word   0xc900
668
;;;     .long   8
669
 
670
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
671
        test_neg_clear
672
        test_zero_clear
673
        test_ovf_clear
674
        test_carry_clear
675
 
676
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
677
        test_h_gr32     long_dst-8, er1
678
        test_gr_a5a5 2
679
        test_gr_a5a5 3
680
        test_gr_a5a5 4
681
        test_gr_a5a5 5
682
        test_gr_a5a5 6
683
        test_gr_a5a5 7
684
 
685
        ;; Now check the result of the move to memory.
686
        cmp.l   #0xdead, @long_dst
687
        beq     .Lnext18
688
        fail
689
.Lnext18:
690
        mov.l   #0, @long_dst    ; zero it again for the next use.
691
 
692
mov_l_imm16_to_abs16:
693
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
694
        set_ccr_zero
695
 
696
        ;; mov.l #xx:16, @aa:16
697
        mov.l   #0xdead:16, @long_dst:16        ; 16-bit address-direct operand
698
;;;     .word   0x7a7c
699
;;;     .word   0xdead
700
;;;     .word   0x4000
701
;;;     .word   @long_dst
702
 
703
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
704
        test_neg_clear
705
        test_zero_clear
706
        test_ovf_clear
707
        test_carry_clear
708
 
709
        test_gr_a5a5 0           ; Make sure _ALL_ general regs not disturbed
710
        test_gr_a5a5 1          ; (first, because on h8/300 we must use one
711
        test_gr_a5a5 2          ; to examine the destination memory).
712
        test_gr_a5a5 3
713
        test_gr_a5a5 4
714
        test_gr_a5a5 5
715
        test_gr_a5a5 6
716
        test_gr_a5a5 7
717
 
718
        ;; Now check the result of the move to memory.
719
        cmp.l   #0xdead, @long_dst
720
        beq     .Lnext19
721
        fail
722
.Lnext19:
723
        mov.l   #0, @long_dst    ; zero it again for the next use.
724
 
725
mov_l_imm16_to_abs32:
726
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
727
        set_ccr_zero
728
 
729
        ;; mov.l #xx:16, @aa:32
730
        mov.l   #0xdead:16, @long_dst:32        ; 32-bit address-direct operand
731
;;;     .word   0x7a7c
732
;;;     .word   0xdead
733
;;;     .word   0x4800
734
;;;     .long   @long_dst
735
 
736
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
737
        test_neg_clear
738
        test_zero_clear
739
        test_ovf_clear
740
        test_carry_clear
741
 
742
        test_gr_a5a5 0           ; Make sure _ALL_ general regs not disturbed
743
        test_gr_a5a5 1          ; (first, because on h8/300 we must use one
744
        test_gr_a5a5 2          ; to examine the destination memory).
745
        test_gr_a5a5 3
746
        test_gr_a5a5 4
747
        test_gr_a5a5 5
748
        test_gr_a5a5 6
749
        test_gr_a5a5 7
750
 
751
        ;; Now check the result of the move to memory.
752
        cmp.l   #0xdead, @long_dst
753
        beq     .Lnext20
754
        fail
755
.Lnext20:
756
        mov.l   #0, @long_dst    ; zero it again for the next use.
757
 
758
mov_l_imm32_to_indirect:
759
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
760
        set_ccr_zero
761
 
762
        ;; mov.l #xx:32, @erd
763
        mov.l   #long_dst, er1
764
        mov.l   #0xcafedead:32, @er1    ; Register indirect operand
765
;;;     .word   0x7a74
766
;;;     .long   0xcafedead
767
;;;     .word   0x0100
768
 
769
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
770
        test_neg_set
771
        test_zero_clear
772
        test_ovf_clear
773
        test_carry_clear
774
 
775
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
776
        test_h_gr32     long_dst, er1
777
        test_gr_a5a5 2
778
        test_gr_a5a5 3
779
        test_gr_a5a5 4
780
        test_gr_a5a5 5
781
        test_gr_a5a5 6
782
        test_gr_a5a5 7
783
 
784
        ;; Now check the result of the move to memory.
785
        cmp.l   #0xcafedead, @long_dst
786
        beq     .Lnext21
787
        fail
788
.Lnext21:
789
        mov.l   #0, @long_dst    ; zero it again for the next use.
790
 
791
mov_l_imm32_to_postinc:         ; post-increment from imm32 to mem
792
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
793
        set_ccr_zero
794
 
795
        ;; mov.l #xx:32, @erd+
796
        mov.l   #long_dst, er1
797
        mov.l   #0xcafedead:32, @er1+   ; Imm32, register post-incr operands.
798
;;;     .word   0x7a74
799
;;;     .long   0xcafedead
800
;;;     .word   0x8100
801
 
802
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
803
        test_neg_set
804
        test_zero_clear
805
        test_ovf_clear
806
        test_carry_clear
807
 
808
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
809
        test_h_gr32     long_dst+4, er1
810
        test_gr_a5a5 2
811
        test_gr_a5a5 3
812
        test_gr_a5a5 4
813
        test_gr_a5a5 5
814
        test_gr_a5a5 6
815
        test_gr_a5a5 7
816
 
817
        ;; Now check the result of the move to memory.
818
        cmp.l   #0xcafedead, @long_dst
819
        beq     .Lnext22
820
        fail
821
.Lnext22:
822
        mov.l   #0, @long_dst    ; zero it again for the next use.
823
 
824
mov_l_imm32_to_postdec:         ; post-decrement from imm32 to mem
825
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
826
        set_ccr_zero
827
 
828
        ;; mov.l #xx:32, @erd-
829
        mov.l   #long_dst, er1
830
        mov.l   #0xcafedead:32, @er1-   ; Imm32, register post-decr operands.
831
;;;     .word   0x7a74
832
;;;     .long   0xcafedead
833
;;;     .word   0xa100
834
 
835
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
836
        test_neg_set
837
        test_zero_clear
838
        test_ovf_clear
839
        test_carry_clear
840
 
841
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
842
        test_h_gr32     long_dst-4, er1
843
        test_gr_a5a5 2
844
        test_gr_a5a5 3
845
        test_gr_a5a5 4
846
        test_gr_a5a5 5
847
        test_gr_a5a5 6
848
        test_gr_a5a5 7
849
 
850
        ;; Now check the result of the move to memory.
851
        cmp.l   #0xcafedead, @long_dst
852
        beq     .Lnext23
853
        fail
854
.Lnext23:
855
        mov.l   #0, @long_dst    ; zero it again for the next use.
856
 
857
mov_l_imm32_to_preinc:          ; pre-increment from register to mem
858
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
859
        set_ccr_zero
860
 
861
        ;; mov.l #xx:32, @+erd
862
        mov.l   #long_dst-4, er1
863
        mov.l   #0xcafedead:32, @+er1   ; Imm32, register pre-incr operands
864
;;;     .word   0x7a74
865
;;;     .long   0xcafedead
866
;;;     .word   0x9100
867
 
868
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
869
        test_neg_set
870
        test_zero_clear
871
        test_ovf_clear
872
        test_carry_clear
873
 
874
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
875
        test_h_gr32     long_dst, er1
876
        test_gr_a5a5 2
877
        test_gr_a5a5 3
878
        test_gr_a5a5 4
879
        test_gr_a5a5 5
880
        test_gr_a5a5 6
881
        test_gr_a5a5 7
882
 
883
        ;; Now check the result of the move to memory.
884
        cmp.l   #0xcafedead, @long_dst
885
        beq     .Lnext24
886
        fail
887
.Lnext24:
888
        mov.l   #0, @long_dst    ; zero it again for the next use.
889
 
890
mov_l_imm32_to_predec:          ; pre-decrement from register to mem
891
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
892
        set_ccr_zero
893
 
894
        ;; mov.l #xx:32, @-erd
895
        mov.l   #long_dst+4, er1
896
        mov.l   #0xcafedead:32, @-er1   ; Imm32, register pre-decr operands
897
;;;     .word   0x7a74
898
;;;     .long   0xcafedead
899
;;;     .word   0xb100
900
 
901
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
902
        test_neg_set
903
        test_zero_clear
904
        test_ovf_clear
905
        test_carry_clear
906
 
907
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
908
        test_h_gr32     long_dst, er1
909
        test_gr_a5a5 2
910
        test_gr_a5a5 3
911
        test_gr_a5a5 4
912
        test_gr_a5a5 5
913
        test_gr_a5a5 6
914
        test_gr_a5a5 7
915
 
916
        ;; Now check the result of the move to memory.
917
        cmp.l   #0xcafedead, @long_dst
918
        beq     .Lnext25
919
        fail
920
.Lnext25:
921
        mov.l   #0, @long_dst    ; zero it again for the next use.
922
 
923
mov_l_imm32_to_disp2:
924
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
925
        set_ccr_zero
926
 
927
        ;; mov.l #xx:32, @(dd:2, erd)
928
        mov.l   #long_dst-12, er1
929
        mov.l   #0xcafedead:32, @(12:2, er1)    ; Imm32, reg plus 2-bit disp. operand
930
;;;     .word   0x7a74
931
;;;     .long   0xcafedead
932
;;;     .word   0x3100
933
 
934
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
935
        test_neg_set
936
        test_zero_clear
937
        test_ovf_clear
938
        test_carry_clear
939
 
940
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
941
        test_h_gr32     long_dst-12, er1
942
        test_gr_a5a5 2
943
        test_gr_a5a5 3
944
        test_gr_a5a5 4
945
        test_gr_a5a5 5
946
        test_gr_a5a5 6
947
        test_gr_a5a5 7
948
 
949
        ;; Now check the result of the move to memory.
950
        cmp.l   #0xcafedead, @long_dst
951
        beq     .Lnext26
952
        fail
953
.Lnext26:
954
        mov.l   #0, @long_dst    ; zero it again for the next use.
955
 
956
mov_l_imm32_to_disp16:
957
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
958
        set_ccr_zero
959
 
960
        ;; mov.l #xx:32, @(dd:16, erd)
961
        mov.l   #long_dst-4, er1
962
        mov.l   #0xcafedead:32, @(4:16, er1)    ; Register plus 16-bit disp. operand
963
;;;     .word   0x7a74
964
;;;     .long   0xcafedead
965
;;;     .word   0xc100
966
;;;     .word   0x0004
967
 
968
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
969
        test_neg_set
970
        test_zero_clear
971
        test_ovf_clear
972
        test_carry_clear
973
 
974
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
975
        test_h_gr32     long_dst-4, er1
976
        test_gr_a5a5 2
977
        test_gr_a5a5 3
978
        test_gr_a5a5 4
979
        test_gr_a5a5 5
980
        test_gr_a5a5 6
981
        test_gr_a5a5 7
982
 
983
        ;; Now check the result of the move to memory.
984
        cmp.l   #0xcafedead, @long_dst
985
        beq     .Lnext27
986
        fail
987
.Lnext27:
988
        mov.l   #0, @long_dst    ; zero it again for the next use.
989
 
990
mov_l_imm32_to_disp32:
991
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
992
        set_ccr_zero
993
 
994
        ;; mov.l #xx:32, @(dd:32, erd)
995
        mov.l   #long_dst-8, er1
996
        mov.l   #0xcafedead:32, @(8:32, er1)   ; Register plus 32-bit disp. operand
997
;;;     .word   0x7a74
998
;;;     .long   0xcafedead
999
;;;     .word   0xc900
1000
;;;     .long   8
1001
 
1002
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
1003
        test_neg_set
1004
        test_zero_clear
1005
        test_ovf_clear
1006
        test_carry_clear
1007
 
1008
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
1009
        test_h_gr32     long_dst-8, er1
1010
        test_gr_a5a5 2
1011
        test_gr_a5a5 3
1012
        test_gr_a5a5 4
1013
        test_gr_a5a5 5
1014
        test_gr_a5a5 6
1015
        test_gr_a5a5 7
1016
 
1017
        ;; Now check the result of the move to memory.
1018
        cmp.l   #0xcafedead, @long_dst
1019
        beq     .Lnext28
1020
        fail
1021
.Lnext28:
1022
        mov.l   #0, @long_dst    ; zero it again for the next use.
1023
 
1024
mov_l_imm32_to_abs16:
1025
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1026
        set_ccr_zero
1027
 
1028
        ;; mov.l #xx:32, @aa:16
1029
        mov.l   #0xcafedead:32, @long_dst:16    ; 16-bit address-direct operand
1030
;;;     .word   0x7a74
1031
;;;     .long   0xcafedead
1032
;;;     .word   0x4000
1033
;;;     .word   @long_dst
1034
 
1035
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
1036
        test_neg_set
1037
        test_zero_clear
1038
        test_ovf_clear
1039
        test_carry_clear
1040
 
1041
        test_gr_a5a5 0           ; Make sure _ALL_ general regs not disturbed
1042
        test_gr_a5a5 1          ; (first, because on h8/300 we must use one
1043
        test_gr_a5a5 2          ; to examine the destination memory).
1044
        test_gr_a5a5 3
1045
        test_gr_a5a5 4
1046
        test_gr_a5a5 5
1047
        test_gr_a5a5 6
1048
        test_gr_a5a5 7
1049
 
1050
        ;; Now check the result of the move to memory.
1051
        cmp.l   #0xcafedead, @long_dst
1052
        beq     .Lnext29
1053
        fail
1054
.Lnext29:
1055
        mov.l   #0, @long_dst    ; zero it again for the next use.
1056
 
1057
mov_l_imm32_to_abs32:
1058
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1059
        set_ccr_zero
1060
 
1061
        ;;  mov.l #xx:32, @aa:32
1062
        mov.l   #0xcafedead:32, @long_dst:32    ; 32-bit address-direct operand
1063
;;;     .word   0x7a74
1064
;;;     .long   0xcafedead
1065
;;;     .word   0x4800
1066
;;;     .long   @long_dst
1067
 
1068
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
1069
        test_neg_set
1070
        test_zero_clear
1071
        test_ovf_clear
1072
        test_carry_clear
1073
 
1074
        test_gr_a5a5 0           ; Make sure _ALL_ general regs not disturbed
1075
        test_gr_a5a5 1          ; (first, because on h8/300 we must use one
1076
        test_gr_a5a5 2          ; to examine the destination memory).
1077
        test_gr_a5a5 3
1078
        test_gr_a5a5 4
1079
        test_gr_a5a5 5
1080
        test_gr_a5a5 6
1081
        test_gr_a5a5 7
1082
 
1083
        ;; Now check the result of the move to memory.
1084
        cmp.l   #0xcafedead, @long_dst
1085
        beq     .Lnext30
1086
        fail
1087
.Lnext30:
1088
        mov.l   #0, @long_dst    ; zero it again for the next use.
1089
 
1090
.endif
1091
 
1092
        ;;
1093
        ;; Move long from register source
1094
        ;; 
1095
 
1096
mov_l_reg32_to_reg32:
1097
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1098
        set_ccr_zero
1099
 
1100
        ;; mov.l ers, erd
1101
        mov.l   #0x12345678, er1
1102
        mov.l   er1, er0        ; Register 32-bit operand
1103
;;;     .word   0x0f90
1104
 
1105
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
1106
        test_neg_clear
1107
        test_zero_clear
1108
        test_ovf_clear
1109
        test_carry_clear
1110
        test_h_gr32 0x12345678 er0
1111
        test_h_gr32 0x12345678 er1      ; mov src unchanged
1112
 
1113
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
1114
        test_gr_a5a5 3
1115
        test_gr_a5a5 4
1116
        test_gr_a5a5 5
1117
        test_gr_a5a5 6
1118
        test_gr_a5a5 7
1119
 
1120
mov_l_reg32_to_indirect:
1121
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1122
        set_ccr_zero
1123
 
1124
        ;; mov.l ers, @erd
1125
        mov.l   #long_dst, er1
1126
        mov.l   er0, @er1       ; Register indirect operand
1127
;;;     .word   0x0100
1128
;;;     .word   0x6990
1129
 
1130
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
1131
        test_neg_set
1132
        test_zero_clear
1133
        test_ovf_clear
1134
        test_carry_clear
1135
 
1136
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
1137
        test_h_gr32     long_dst, er1
1138
        test_gr_a5a5 2
1139
        test_gr_a5a5 3
1140
        test_gr_a5a5 4
1141
        test_gr_a5a5 5
1142
        test_gr_a5a5 6
1143
        test_gr_a5a5 7
1144
 
1145
        ;; Now check the result of the move to memory.
1146
        mov.l   #0, er0
1147
        mov.l   @long_dst, er0
1148
        cmp.l   er2, er0
1149
        beq     .Lnext44
1150
        fail
1151
.Lnext44:
1152
        mov.l   #0, er0
1153
        mov.l   er0, @long_dst  ; zero it again for the next use.
1154
 
1155
.if (sim_cpu == h8sx)
1156
mov_l_reg32_to_postinc:         ; post-increment from register to mem
1157
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1158
        set_ccr_zero
1159
 
1160
        ;; mov.l ers, @erd+
1161
        mov.l   #long_dst, er1
1162
        mov.l   er0, @er1+      ; Register post-incr operand
1163
;;;     .word   0x0103
1164
;;;     .word   0x6d90
1165
 
1166
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
1167
        test_neg_set
1168
        test_zero_clear
1169
        test_ovf_clear
1170
        test_carry_clear
1171
 
1172
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
1173
        test_h_gr32     long_dst+4, er1
1174
        test_gr_a5a5 2
1175
        test_gr_a5a5 3
1176
        test_gr_a5a5 4
1177
        test_gr_a5a5 5
1178
        test_gr_a5a5 6
1179
        test_gr_a5a5 7
1180
 
1181
        ;; Now check the result of the move to memory.
1182
        cmp.l   er2, @long_dst
1183
        beq     .Lnext49
1184
        fail
1185
.Lnext49:
1186
        mov.l   #0, @long_dst    ; zero it again for the next use.
1187
 
1188
mov_l_reg32_to_postdec:         ; post-decrement from register to mem
1189
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1190
        set_ccr_zero
1191
 
1192
        ;; mov.l ers, @erd-
1193
        mov.l   #long_dst, er1
1194
        mov.l   er0, @er1-      ; Register post-decr operand
1195
;;;     .word   0x0101
1196
;;;     .word   0x6d90
1197
 
1198
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
1199
        test_neg_set
1200
        test_zero_clear
1201
        test_ovf_clear
1202
        test_carry_clear
1203
 
1204
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
1205
        test_h_gr32     long_dst-4, er1
1206
        test_gr_a5a5 2
1207
        test_gr_a5a5 3
1208
        test_gr_a5a5 4
1209
        test_gr_a5a5 5
1210
        test_gr_a5a5 6
1211
        test_gr_a5a5 7
1212
 
1213
        ;; Now check the result of the move to memory.
1214
        cmp.l   er2, @long_dst
1215
        beq     .Lnext50
1216
        fail
1217
.Lnext50:
1218
        mov.l   #0, @long_dst    ; zero it again for the next use.
1219
 
1220
mov_l_reg32_to_preinc:          ; pre-increment from register to mem
1221
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1222
        set_ccr_zero
1223
 
1224
        ;; mov.l ers, @+erd
1225
        mov.l   #long_dst-4, er1
1226
        mov.l   er0, @+er1      ; Register pre-incr operand
1227
;;;     .word   0x0102
1228
;;;     .word   0x6d90
1229
 
1230
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
1231
        test_neg_set
1232
        test_zero_clear
1233
        test_ovf_clear
1234
        test_carry_clear
1235
 
1236
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
1237
        test_h_gr32     long_dst, er1
1238
        test_gr_a5a5 2
1239
        test_gr_a5a5 3
1240
        test_gr_a5a5 4
1241
        test_gr_a5a5 5
1242
        test_gr_a5a5 6
1243
        test_gr_a5a5 7
1244
 
1245
        ;; Now check the result of the move to memory.
1246
        cmp.l   er2, @long_dst
1247
        beq     .Lnext51
1248
        fail
1249
.Lnext51:
1250
        mov.l   #0, @long_dst    ; zero it again for the next use.
1251
.endif                          ; h8sx
1252
 
1253
mov_l_reg32_to_predec:          ; pre-decrement from register to mem
1254
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1255
        set_ccr_zero
1256
 
1257
        ;; mov.l ers, @-erd
1258
        mov.l   #long_dst+4, er1
1259
        mov.l   er0, @-er1      ; Register pre-decr operand
1260
;;;     .word   0x0100
1261
;;;     .word   0x6d90
1262
 
1263
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
1264
        test_neg_set
1265
        test_zero_clear
1266
        test_ovf_clear
1267
        test_carry_clear
1268
 
1269
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
1270
        test_h_gr32     long_dst, er1
1271
        test_gr_a5a5 2
1272
        test_gr_a5a5 3
1273
        test_gr_a5a5 4
1274
        test_gr_a5a5 5
1275
        test_gr_a5a5 6
1276
        test_gr_a5a5 7
1277
 
1278
        ;; Now check the result of the move to memory.
1279
        mov.l   #0, er0
1280
        mov.l   @long_dst, er0
1281
        cmp.l   er2, er0
1282
        beq     .Lnext48
1283
        fail
1284
.Lnext48:
1285
        mov.l   #0, er0
1286
        mov.l   er0, @long_dst  ; zero it again for the next use.
1287
 
1288
.if (sim_cpu == h8sx)
1289
mov_l_reg32_to_disp2:
1290
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1291
        set_ccr_zero
1292
 
1293
        ;; mov.l ers, @(dd:2, erd)
1294
        mov.l   #long_dst-12, er1
1295
        mov.l   er0, @(12:2, er1)       ; Register plus 2-bit disp. operand
1296
;;;     .word   0x0103
1297
;;;     .word   0x6990
1298
 
1299
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
1300
        test_neg_set
1301
        test_zero_clear
1302
        test_ovf_clear
1303
        test_carry_clear
1304
 
1305
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
1306
        test_h_gr32     long_dst-12, er1
1307
        test_gr_a5a5 2
1308
        test_gr_a5a5 3
1309
        test_gr_a5a5 4
1310
        test_gr_a5a5 5
1311
        test_gr_a5a5 6
1312
        test_gr_a5a5 7
1313
 
1314
        ;; Now check the result of the move to memory.
1315
        cmp.l   er2, @long_dst
1316
        beq     .Lnext52
1317
        fail
1318
.Lnext52:
1319
        mov.l   #0, @long_dst    ; zero it again for the next use.
1320
.endif                          ; h8sx
1321
 
1322
mov_l_reg32_to_disp16:
1323
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1324
        set_ccr_zero
1325
 
1326
        ;; mov.l ers, @(dd:16, erd)
1327
        mov.l   #long_dst-4, er1
1328
        mov.l   er0, @(4:16, er1)       ; Register plus 16-bit disp. operand
1329
;;;     .word   0x0100
1330
;;;     .word   0x6f90
1331
;;;     .word   0x0004
1332
 
1333
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
1334
        test_neg_set
1335
        test_zero_clear
1336
        test_ovf_clear
1337
        test_carry_clear
1338
 
1339
        test_h_gr32     long_dst-4, er1
1340
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
1341
        test_gr_a5a5 2
1342
        test_gr_a5a5 3
1343
        test_gr_a5a5 4
1344
        test_gr_a5a5 5
1345
        test_gr_a5a5 6
1346
        test_gr_a5a5 7
1347
 
1348
        ;; Now check the result of the move to memory.
1349
        mov.l   #0, er0
1350
        mov.l   @long_dst, er0
1351
        cmp.l   er2, er0
1352
        beq     .Lnext45
1353
        fail
1354
.Lnext45:
1355
        mov.l   #0, er0
1356
        mov.l   er0, @long_dst  ; zero it again for the next use.
1357
 
1358
mov_l_reg32_to_disp32:
1359
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1360
        set_ccr_zero
1361
 
1362
        ;; mov.l ers, @(dd:32, erd)
1363
        mov.l   #long_dst-8, er1
1364
        mov.l   er0, @(8:32, er1)       ; Register plus 32-bit disp. operand
1365
;;;     .word   0x7890
1366
;;;     .word   0x6ba0
1367
;;;     .long   8
1368
 
1369
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
1370
        test_neg_set
1371
        test_zero_clear
1372
        test_ovf_clear
1373
        test_carry_clear
1374
 
1375
        test_h_gr32     long_dst-8, er1
1376
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
1377
        test_gr_a5a5 2
1378
        test_gr_a5a5 3
1379
        test_gr_a5a5 4
1380
        test_gr_a5a5 5
1381
        test_gr_a5a5 6
1382
        test_gr_a5a5 7
1383
 
1384
        ;; Now check the result of the move to memory.
1385
        mov.l   #0, er0
1386
        mov.l   @long_dst, er0
1387
        cmp.l   er2, er0
1388
        beq     .Lnext46
1389
        fail
1390
.Lnext46:
1391
        mov.l   #0, er0
1392
        mov.l   er0, @long_dst  ; zero it again for the next use.
1393
 
1394
mov_l_reg32_to_abs16:
1395
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1396
        set_ccr_zero
1397
 
1398
        ;; mov.l ers, @aa:16
1399
        mov.l   er0, @long_dst:16       ; 16-bit address-direct operand
1400
;;;     .word   0x0100
1401
;;;     .word   0x6b80
1402
;;;     .word   @long_dst
1403
 
1404
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
1405
        test_neg_set
1406
        test_zero_clear
1407
        test_ovf_clear
1408
        test_carry_clear
1409
 
1410
        test_gr_a5a5 0           ; Make sure _ALL_ general regs not disturbed
1411
        test_gr_a5a5 1          ; (first, because on h8/300 we must use one
1412
        test_gr_a5a5 2          ; to examine the destination memory).
1413
        test_gr_a5a5 3
1414
        test_gr_a5a5 4
1415
        test_gr_a5a5 5
1416
        test_gr_a5a5 6
1417
        test_gr_a5a5 7
1418
 
1419
        ;; Now check the result of the move to memory.
1420
        mov.l   #0, er0
1421
        mov.l   @long_dst, er0
1422
        cmp.l   er0, er1
1423
        beq     .Lnext41
1424
        fail
1425
.Lnext41:
1426
        mov.l   #0, er0
1427
        mov.l   er0, @long_dst  ; zero it again for the next use.
1428
 
1429
mov_l_reg32_to_abs32:
1430
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1431
        set_ccr_zero
1432
 
1433
        ;; mov.l ers, @aa:32
1434
        mov.l   er0, @long_dst:32       ; 32-bit address-direct operand
1435
;;;     .word   0x0100
1436
;;;     .word   0x6ba0
1437
;;;     .long   @long_dst
1438
 
1439
        ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
1440
        test_neg_set
1441
        test_zero_clear
1442
        test_ovf_clear
1443
        test_carry_clear
1444
 
1445
        test_gr_a5a5 0           ; Make sure _ALL_ general regs not disturbed
1446
        test_gr_a5a5 1          ; (first, because on h8/300 we must use one
1447
        test_gr_a5a5 2          ; to examine the destination memory).
1448
        test_gr_a5a5 3
1449
        test_gr_a5a5 4
1450
        test_gr_a5a5 5
1451
        test_gr_a5a5 6
1452
        test_gr_a5a5 7
1453
 
1454
        ;; Now check the result of the move to memory.
1455
        mov.l   #0, er0
1456
        mov.l   @long_dst, er0
1457
        cmp.l   er0, er1
1458
        beq     .Lnext42
1459
        fail
1460
.Lnext42:
1461
        mov.l   #0, er0
1462
        mov.l   er0, @long_dst  ; zero it again for the next use.
1463
 
1464
        ;;
1465
        ;; Move long to register destination.
1466
        ;; 
1467
 
1468
mov_l_indirect_to_reg32:
1469
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1470
        set_ccr_zero
1471
 
1472
        ;; mov.l @ers, erd
1473
        mov.l   #long_src, er1
1474
        mov.l   @er1, er0       ; Register indirect operand
1475
;;;     .word   0x0100
1476
;;;     .word   0x6910
1477
 
1478
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
1479
        test_neg_clear
1480
        test_zero_clear
1481
        test_ovf_clear
1482
        test_carry_clear
1483
 
1484
        test_h_gr32 0x77777777 er0
1485
 
1486
        test_h_gr32     long_src, er1
1487
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
1488
        test_gr_a5a5 3
1489
        test_gr_a5a5 4
1490
        test_gr_a5a5 5
1491
        test_gr_a5a5 6
1492
        test_gr_a5a5 7
1493
 
1494
mov_l_postinc_to_reg32:         ; post-increment from mem to register
1495
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1496
        set_ccr_zero
1497
 
1498
        ;; mov.l @ers+, erd
1499
 
1500
        mov.l   #long_src, er1
1501
        mov.l   @er1+, er0      ; Register post-incr operand
1502
;;;     .word   0x0100
1503
;;;     .word   0x6d10
1504
 
1505
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
1506
        test_neg_clear
1507
        test_zero_clear
1508
        test_ovf_clear
1509
        test_carry_clear
1510
 
1511
        test_h_gr32 0x77777777 er0
1512
 
1513
        test_h_gr32     long_src+4, er1
1514
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
1515
        test_gr_a5a5 3
1516
        test_gr_a5a5 4
1517
        test_gr_a5a5 5
1518
        test_gr_a5a5 6
1519
        test_gr_a5a5 7
1520
 
1521
.if (sim_cpu == h8sx)
1522
mov_l_postdec_to_reg32:         ; post-decrement from mem to register
1523
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1524
        set_ccr_zero
1525
 
1526
        ;; mov.l @ers-, erd
1527
 
1528
        mov.l   #long_src, er1
1529
        mov.l   @er1-, er0      ; Register post-decr operand
1530
;;;     .word   0x0102
1531
;;;     .word   0x6d10
1532
 
1533
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
1534
        test_neg_clear
1535
        test_zero_clear
1536
        test_ovf_clear
1537
        test_carry_clear
1538
 
1539
        test_h_gr32 0x77777777 er0
1540
 
1541
        test_h_gr32     long_src-4, er1
1542
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
1543
        test_gr_a5a5 3
1544
        test_gr_a5a5 4
1545
        test_gr_a5a5 5
1546
        test_gr_a5a5 6
1547
        test_gr_a5a5 7
1548
 
1549
mov_l_preinc_to_reg32:          ; pre-increment from mem to register
1550
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1551
        set_ccr_zero
1552
 
1553
        ;; mov.l @+ers, erd
1554
 
1555
        mov.l   #long_src-4, er1
1556
        mov.l   @+er1, er0      ; Register pre-incr operand
1557
;;;     .word   0x0101
1558
;;;     .word   0x6d10
1559
 
1560
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
1561
        test_neg_clear
1562
        test_zero_clear
1563
        test_ovf_clear
1564
        test_carry_clear
1565
 
1566
        test_h_gr32 0x77777777 er0
1567
 
1568
        test_h_gr32     long_src, er1
1569
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
1570
        test_gr_a5a5 3
1571
        test_gr_a5a5 4
1572
        test_gr_a5a5 5
1573
        test_gr_a5a5 6
1574
        test_gr_a5a5 7
1575
 
1576
mov_l_predec_to_reg32:          ; pre-decrement from mem to register
1577
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1578
        set_ccr_zero
1579
 
1580
        ;; mov.l @-ers, erd
1581
 
1582
        mov.l   #long_src+4, er1
1583
        mov.l   @-er1, er0      ; Register pre-decr operand
1584
;;;     .word   0x0103
1585
;;;     .word   0x6d10
1586
 
1587
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
1588
        test_neg_clear
1589
        test_zero_clear
1590
        test_ovf_clear
1591
        test_carry_clear
1592
 
1593
        test_h_gr32 0x77777777 er0
1594
 
1595
        test_h_gr32     long_src, er1
1596
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
1597
        test_gr_a5a5 3
1598
        test_gr_a5a5 4
1599
        test_gr_a5a5 5
1600
        test_gr_a5a5 6
1601
        test_gr_a5a5 7
1602
 
1603
 
1604
mov_l_disp2_to_reg32:
1605
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1606
        set_ccr_zero
1607
 
1608
        ;; mov.l @(dd:2, ers), erd
1609
        mov.l   #long_src-4, er1
1610
        mov.l   @(4:2, er1), er0        ; Register plus 2-bit disp. operand
1611
;;;     .word   0x0101
1612
;;;     .word   0x6910
1613
 
1614
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
1615
        test_neg_clear
1616
        test_zero_clear
1617
        test_ovf_clear
1618
        test_carry_clear
1619
 
1620
        test_h_gr32 0x77777777 er0      ; mov result:   a5a5 | 7777
1621
 
1622
        test_h_gr32     long_src-4, er1
1623
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
1624
        test_gr_a5a5 3
1625
        test_gr_a5a5 4
1626
        test_gr_a5a5 5
1627
        test_gr_a5a5 6
1628
        test_gr_a5a5 7
1629
.endif                          ; h8sx
1630
 
1631
mov_l_disp16_to_reg32:
1632
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1633
        set_ccr_zero
1634
 
1635
        ;; mov.l @(dd:16, ers), erd
1636
        mov.l   #long_src+0x1234, er1
1637
        mov.l   @(-0x1234:16, er1), er0 ; Register plus 16-bit disp. operand
1638
;;;     .word   0x0100
1639
;;;     .word   0x6f10
1640
;;;     .word   -0x1234
1641
 
1642
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
1643
        test_neg_clear
1644
        test_zero_clear
1645
        test_ovf_clear
1646
        test_carry_clear
1647
 
1648
        test_h_gr32 0x77777777 er0      ; mov result:   a5a5 | 7777
1649
 
1650
        test_h_gr32     long_src+0x1234, er1
1651
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
1652
        test_gr_a5a5 3
1653
        test_gr_a5a5 4
1654
        test_gr_a5a5 5
1655
        test_gr_a5a5 6
1656
        test_gr_a5a5 7
1657
 
1658
mov_l_disp32_to_reg32:
1659
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1660
        set_ccr_zero
1661
 
1662
        ;; mov.l @(dd:32, ers), erd
1663
        mov.l   #long_src+65536, er1
1664
        mov.l   @(-65536:32, er1), er0  ; Register plus 32-bit disp. operand
1665
;;;     .word   0x7890
1666
;;;     .word   0x6b20
1667
;;;     .long   -65536
1668
 
1669
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
1670
        test_neg_clear
1671
        test_zero_clear
1672
        test_ovf_clear
1673
        test_carry_clear
1674
 
1675
        test_h_gr32 0x77777777 er0      ; mov result:   a5a5 | 7777
1676
 
1677
        test_h_gr32     long_src+65536, er1
1678
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
1679
        test_gr_a5a5 3
1680
        test_gr_a5a5 4
1681
        test_gr_a5a5 5
1682
        test_gr_a5a5 6
1683
        test_gr_a5a5 7
1684
 
1685
mov_l_abs16_to_reg32:
1686
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1687
        set_ccr_zero
1688
 
1689
        ;; mov.l @aa:16, erd
1690
        mov.l   @long_src:16, er0       ; 16-bit address-direct operand
1691
;;;     .word   0x0100
1692
;;;     .word   0x6b00
1693
;;;     .word   @long_src
1694
 
1695
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
1696
        test_neg_clear
1697
        test_zero_clear
1698
        test_ovf_clear
1699
        test_carry_clear
1700
 
1701
        test_h_gr32 0x77777777 er0
1702
 
1703
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1704
        test_gr_a5a5 2
1705
        test_gr_a5a5 3
1706
        test_gr_a5a5 4
1707
        test_gr_a5a5 5
1708
        test_gr_a5a5 6
1709
        test_gr_a5a5 7
1710
 
1711
mov_l_abs32_to_reg32:
1712
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1713
        set_ccr_zero
1714
 
1715
        ;; mov.l @aa:32, erd
1716
        mov.l   @long_src:32, er0       ; 32-bit address-direct operand
1717
;;;     .word   0x0100
1718
;;;     .word   0x6b20
1719
;;;     .long   @long_src
1720
 
1721
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
1722
        test_neg_clear
1723
        test_zero_clear
1724
        test_ovf_clear
1725
        test_carry_clear
1726
 
1727
        test_h_gr32 0x77777777 er0
1728
 
1729
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1730
        test_gr_a5a5 2
1731
        test_gr_a5a5 3
1732
        test_gr_a5a5 4
1733
        test_gr_a5a5 5
1734
        test_gr_a5a5 6
1735
        test_gr_a5a5 7
1736
 
1737
 
1738
.if (sim_cpu == h8sx)
1739
 
1740
        ;;
1741
        ;; Move long from memory to memory
1742
        ;; 
1743
 
1744
mov_l_indirect_to_indirect:     ; reg indirect, memory to memory
1745
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1746
        set_ccr_zero
1747
 
1748
        ;; mov.l @ers, @erd
1749
 
1750
        mov.l   #long_src, er1
1751
        mov.l   #long_dst, er0
1752
        mov.l   @er1, @er0
1753
;;;     .word   0x0108
1754
;;;     .word   0x0100
1755
 
1756
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
1757
        test_neg_clear
1758
        test_zero_clear
1759
        test_ovf_clear
1760
        test_carry_clear
1761
 
1762
        ;; Verify the affected registers.
1763
 
1764
        test_h_gr32  long_dst er0
1765
        test_h_gr32  long_src er1
1766
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
1767
        test_gr_a5a5 3
1768
        test_gr_a5a5 4
1769
        test_gr_a5a5 5
1770
        test_gr_a5a5 6
1771
        test_gr_a5a5 7
1772
 
1773
        ;; Now check the result of the move to memory.
1774
        cmp.l   @long_src, @long_dst
1775
        beq     .Lnext55
1776
        fail
1777
.Lnext55:
1778
        ;; Now clear the destination location, and verify that.
1779
        mov.l   #0, @long_dst
1780
        cmp.l   @long_src, @long_dst
1781
        bne     .Lnext56
1782
        fail
1783
.Lnext56:                       ; OK, pass on.
1784
 
1785
mov_l_postinc_to_postinc:       ; reg post-increment, memory to memory
1786
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1787
        set_ccr_zero
1788
 
1789
        ;; mov.l @ers+, @erd+
1790
 
1791
        mov.l   #long_src, er1
1792
        mov.l   #long_dst, er0
1793
        mov.l   @er1+, @er0+
1794
;;;     .word   0x0108
1795
;;;     .word   0x8180
1796
 
1797
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
1798
        test_neg_clear
1799
        test_zero_clear
1800
        test_ovf_clear
1801
        test_carry_clear
1802
 
1803
        ;; Verify the affected registers.
1804
 
1805
        test_h_gr32  long_dst+4 er0
1806
        test_h_gr32  long_src+4 er1
1807
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
1808
        test_gr_a5a5 3
1809
        test_gr_a5a5 4
1810
        test_gr_a5a5 5
1811
        test_gr_a5a5 6
1812
        test_gr_a5a5 7
1813
 
1814
        ;; Now check the result of the move to memory.
1815
        cmp.l   @long_src, @long_dst
1816
        beq     .Lnext65
1817
        fail
1818
.Lnext65:
1819
        ;; Now clear the destination location, and verify that.
1820
        mov.l   #0, @long_dst
1821
        cmp.l   @long_src, @long_dst
1822
        bne     .Lnext66
1823
        fail
1824
.Lnext66:                       ; OK, pass on.
1825
 
1826
mov_l_postdec_to_postdec:       ; reg post-decrement, memory to memory
1827
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1828
        set_ccr_zero
1829
 
1830
        ;; mov.l @ers-, @erd-
1831
 
1832
        mov.l   #long_src, er1
1833
        mov.l   #long_dst, er0
1834
        mov.l   @er1-, @er0-
1835
;;;     .word   0x0108
1836
;;;     .word   0xa1a0
1837
 
1838
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
1839
        test_neg_clear
1840
        test_zero_clear
1841
        test_ovf_clear
1842
        test_carry_clear
1843
 
1844
        ;; Verify the affected registers.
1845
 
1846
        test_h_gr32  long_dst-4 er0
1847
        test_h_gr32  long_src-4 er1
1848
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
1849
        test_gr_a5a5 3
1850
        test_gr_a5a5 4
1851
        test_gr_a5a5 5
1852
        test_gr_a5a5 6
1853
        test_gr_a5a5 7
1854
 
1855
        ;; Now check the result of the move to memory.
1856
        cmp.l   @long_src, @long_dst
1857
        beq     .Lnext75
1858
        fail
1859
.Lnext75:
1860
        ;; Now clear the destination location, and verify that.
1861
        mov.l   #0, @long_dst
1862
        cmp.l   @long_src, @long_dst
1863
        bne     .Lnext76
1864
        fail
1865
.Lnext76:                       ; OK, pass on.
1866
 
1867
mov_l_preinc_to_preinc:         ; reg pre-increment, memory to memory
1868
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1869
        set_ccr_zero
1870
 
1871
        ;; mov.l @+ers, @+erd
1872
 
1873
        mov.l   #long_src-4, er1
1874
        mov.l   #long_dst-4, er0
1875
        mov.l   @+er1, @+er0
1876
;;;     .word   0x0108
1877
;;;     .word   0x9190
1878
 
1879
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
1880
        test_neg_clear
1881
        test_zero_clear
1882
        test_ovf_clear
1883
        test_carry_clear
1884
 
1885
        ;; Verify the affected registers.
1886
 
1887
        test_h_gr32  long_dst er0
1888
        test_h_gr32  long_src er1
1889
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
1890
        test_gr_a5a5 3
1891
        test_gr_a5a5 4
1892
        test_gr_a5a5 5
1893
        test_gr_a5a5 6
1894
        test_gr_a5a5 7
1895
 
1896
        ;; Now check the result of the move to memory.
1897
        cmp.l   @long_src, @long_dst
1898
        beq     .Lnext85
1899
        fail
1900
.Lnext85:
1901
        ;; Now clear the destination location, and verify that.
1902
        mov.l   #0, @long_dst
1903
        cmp.l   @long_src, @long_dst
1904
        bne     .Lnext86
1905
        fail
1906
.Lnext86:                               ; OK, pass on.
1907
 
1908
mov_l_predec_to_predec:         ; reg pre-decrement, memory to memory
1909
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1910
        set_ccr_zero
1911
 
1912
        ;; mov.l @-ers, @-erd
1913
 
1914
        mov.l   #long_src+4, er1
1915
        mov.l   #long_dst+4, er0
1916
        mov.l   @-er1, @-er0
1917
;;;     .word   0x0108
1918
;;;     .word   0xb1b0
1919
 
1920
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
1921
        test_neg_clear
1922
        test_zero_clear
1923
        test_ovf_clear
1924
        test_carry_clear
1925
 
1926
        ;; Verify the affected registers.
1927
 
1928
        test_h_gr32  long_dst er0
1929
        test_h_gr32  long_src er1
1930
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
1931
        test_gr_a5a5 3
1932
        test_gr_a5a5 4
1933
        test_gr_a5a5 5
1934
        test_gr_a5a5 6
1935
        test_gr_a5a5 7
1936
 
1937
        ;; Now check the result of the move to memory.
1938
        cmp.l   @long_src, @long_dst
1939
        beq     .Lnext95
1940
        fail
1941
.Lnext95:
1942
        ;; Now clear the destination location, and verify that.
1943
        mov.l   #0, @long_dst
1944
        cmp.l   @long_src, @long_dst
1945
        bne     .Lnext96
1946
        fail
1947
.Lnext96:                       ; OK, pass on.
1948
 
1949
mov_l_disp2_to_disp2:           ; reg 2-bit disp, memory to memory
1950
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1951
        set_ccr_zero
1952
 
1953
        ;; mov.l @(dd:2, ers), @(dd:2, erd)
1954
 
1955
        mov.l   #long_src-4, er1
1956
        mov.l   #long_dst-8, er0
1957
        mov.l   @(4:2, er1), @(8:2, er0)
1958
;;;     .word   0x0108
1959
;;;     .word   0x1120
1960
 
1961
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
1962
        test_neg_clear
1963
        test_zero_clear
1964
        test_ovf_clear
1965
        test_carry_clear
1966
 
1967
        ;; Verify the affected registers.
1968
 
1969
        test_h_gr32  long_dst-8 er0
1970
        test_h_gr32  long_src-4 er1
1971
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
1972
        test_gr_a5a5 3
1973
        test_gr_a5a5 4
1974
        test_gr_a5a5 5
1975
        test_gr_a5a5 6
1976
        test_gr_a5a5 7
1977
 
1978
        ;; Now check the result of the move to memory.
1979
        cmp.l   @long_src, @long_dst
1980
        beq     .Lnext105
1981
        fail
1982
.Lnext105:
1983
        ;; Now clear the destination location, and verify that.
1984
        mov.l   #0, @long_dst
1985
        cmp.l   @long_src, @long_dst
1986
        bne     .Lnext106
1987
        fail
1988
.Lnext106:                      ; OK, pass on.
1989
 
1990
mov_l_disp16_to_disp16:         ; reg 16-bit disp, memory to memory
1991
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1992
        set_ccr_zero
1993
 
1994
        ;; mov.l @(dd:16, ers), @(dd:16, erd)
1995
 
1996
        mov.l   #long_src-1, er1
1997
        mov.l   #long_dst-2, er0
1998
        mov.l   @(1:16, er1), @(2:16, er0)
1999
;;;     .word   0x0108
2000
;;;     .word   0xc1c0
2001
;;;     .word   0x0001
2002
;;;     .word   0x0002
2003
 
2004
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
2005
        test_neg_clear
2006
        test_zero_clear
2007
        test_ovf_clear
2008
        test_carry_clear
2009
 
2010
        ;; Verify the affected registers.
2011
 
2012
        test_h_gr32  long_dst-2 er0
2013
        test_h_gr32  long_src-1 er1
2014
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
2015
        test_gr_a5a5 3
2016
        test_gr_a5a5 4
2017
        test_gr_a5a5 5
2018
        test_gr_a5a5 6
2019
        test_gr_a5a5 7
2020
 
2021
        ;; Now check the result of the move to memory.
2022
        cmp.l   @long_src, @long_dst
2023
        beq     .Lnext115
2024
        fail
2025
.Lnext115:
2026
        ;; Now clear the destination location, and verify that.
2027
        mov.l   #0, @long_dst
2028
        cmp.l   @long_src, @long_dst
2029
        bne     .Lnext116
2030
        fail
2031
.Lnext116:                      ; OK, pass on.
2032
 
2033
mov_l_disp32_to_disp32:         ; reg 32-bit disp, memory to memory
2034
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2035
        set_ccr_zero
2036
 
2037
        ;; mov.l @(dd:32, ers), @(dd:32, erd)
2038
 
2039
        mov.l   #long_src-1, er1
2040
        mov.l   #long_dst-2, er0
2041
        mov.l   @(1:32, er1), @(2:32, er0)
2042
;;;     .word   0x0108
2043
;;;     .word   0xc9c8
2044
;;;     .long   1
2045
;;;     .long   2
2046
 
2047
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
2048
        test_neg_clear
2049
        test_zero_clear
2050
        test_ovf_clear
2051
        test_carry_clear
2052
 
2053
        ;; Verify the affected registers.
2054
 
2055
        test_h_gr32  long_dst-2 er0
2056
        test_h_gr32  long_src-1 er1
2057
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
2058
        test_gr_a5a5 3
2059
        test_gr_a5a5 4
2060
        test_gr_a5a5 5
2061
        test_gr_a5a5 6
2062
        test_gr_a5a5 7
2063
 
2064
        ;; Now check the result of the move to memory.
2065
        cmp.l   @long_src, @long_dst
2066
        beq     .Lnext125
2067
        fail
2068
.Lnext125:
2069
        ;; Now clear the destination location, and verify that.
2070
        mov.l   #0, @long_dst
2071
        cmp.l   @long_src, @long_dst
2072
        bne     .Lnext126
2073
        fail
2074
.Lnext126:                              ; OK, pass on.
2075
 
2076
mov_l_abs16_to_abs16:           ; 16-bit absolute addr, memory to memory
2077
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2078
        set_ccr_zero
2079
 
2080
        ;; mov.l @aa:16, @aa:16
2081
 
2082
        mov.l   @long_src:16, @long_dst:16
2083
;;;     .word   0x0108
2084
;;;     .word   0x4040
2085
;;;     .word   @long_src
2086
;;;     .word   @long_dst
2087
 
2088
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
2089
        test_neg_clear
2090
        test_zero_clear
2091
        test_ovf_clear
2092
        test_carry_clear
2093
 
2094
 
2095
        test_gr_a5a5 0           ; Make sure *NO* general registers are changed
2096
        test_gr_a5a5 1
2097
        test_gr_a5a5 2
2098
        test_gr_a5a5 3
2099
        test_gr_a5a5 4
2100
        test_gr_a5a5 5
2101
        test_gr_a5a5 6
2102
        test_gr_a5a5 7
2103
 
2104
        ;; Now check the result of the move to memory.
2105
        cmp.l   @long_src, @long_dst
2106
        beq     .Lnext135
2107
        fail
2108
.Lnext135:
2109
        ;; Now clear the destination location, and verify that.
2110
        mov.l   #0, @long_dst
2111
        cmp.l   @long_src, @long_dst
2112
        bne     .Lnext136
2113
        fail
2114
.Lnext136:                              ; OK, pass on.
2115
 
2116
mov_l_abs32_to_abs32:           ; 32-bit absolute addr, memory to memory
2117
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2118
        set_ccr_zero
2119
 
2120
        ;; mov.l @aa:32, @aa:32
2121
 
2122
        mov.l   @long_src:32, @long_dst:32
2123
;;;     .word   0x0108
2124
;;;     .word   0x4848
2125
;;;     .long   @long_src
2126
;;;     .long   @long_dst
2127
 
2128
        ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
2129
        test_neg_clear
2130
        test_zero_clear
2131
        test_ovf_clear
2132
        test_carry_clear
2133
 
2134
        test_gr_a5a5 0           ; Make sure *NO* general registers are changed
2135
        test_gr_a5a5 1
2136
        test_gr_a5a5 2
2137
        test_gr_a5a5 3
2138
        test_gr_a5a5 4
2139
        test_gr_a5a5 5
2140
        test_gr_a5a5 6
2141
        test_gr_a5a5 7
2142
 
2143
        ;; Now check the result of the move to memory.
2144
        cmp.l   @long_src, @long_dst
2145
        beq     .Lnext145
2146
        fail
2147
.Lnext145:
2148
        ;; Now clear the destination location, and verify that.
2149
        mov.l   #0, @long_dst
2150
        cmp.l   @long_src, @long_dst
2151
        bne     .Lnext146
2152
        fail
2153
.Lnext146:                              ; OK, pass on.
2154
 
2155
 
2156
.endif
2157
 
2158
        pass
2159
 
2160
        exit 0

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.