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

Subversion Repositories scarts

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 26 jlechner
# Hitachi H8 testcase 'shlr'
2
# mach(): all
3
# as(h8300):    --defsym sim_cpu=0
4
# as(h8300h):   --defsym sim_cpu=1
5
# as(h8300s):   --defsym sim_cpu=2
6
# as(h8sx):     --defsym sim_cpu=3
7
# ld(h8300h):   -m h8300helf
8
# ld(h8300s):   -m h8300self
9
# ld(h8sx):     -m h8300sxelf
10
 
11
        .include "testutils.inc"
12
 
13
        start
14
 
15
        .data
16
byte_dest:      .byte   0xa5
17
        .align 2
18
word_dest:      .word   0xa5a5
19
        .align 4
20
long_dest:      .long   0xa5a5a5a5
21
 
22
        .text
23
 
24
shlr_b_reg8_1:
25
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
26
        set_ccr_zero
27
 
28
        shlr.b  r0l             ; shift right logical by one
29
;;;     .word   0x1108
30
 
31
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
32
        test_zero_clear
33
        test_ovf_clear
34
        test_neg_clear
35
 
36
        test_h_gr16 0xa552 r0   ; 1010 0101 -> 0101 0010
37
.if (sim_cpu)
38
        test_h_gr32 0xa5a5a552 er0
39
.endif
40
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
41
        test_gr_a5a5 2
42
        test_gr_a5a5 3
43
        test_gr_a5a5 4
44
        test_gr_a5a5 5
45
        test_gr_a5a5 6
46
        test_gr_a5a5 7
47
 
48
.if (sim_cpu == h8sx)
49
shlr_b_ind_1:
50
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
51
        set_ccr_zero
52
 
53
        mov     #byte_dest, er0
54
        shlr.b  @er0    ; shift right logical by one, indirect
55
;;;     .word   0x7d00
56
;;;     .word   0x1100
57
 
58
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
59
        test_zero_clear
60
        test_ovf_clear
61
        test_neg_clear
62
 
63
        test_h_gr32 byte_dest er0
64
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
65
        test_gr_a5a5 2
66
        test_gr_a5a5 3
67
        test_gr_a5a5 4
68
        test_gr_a5a5 5
69
        test_gr_a5a5 6
70
        test_gr_a5a5 7
71
        ; 1010 0101 -> 0101 0010
72
        cmp.b   #0x52, @byte_dest
73
        beq     .Lbind1
74
        fail
75
.Lbind1:
76
        mov.b   #0xa5, @byte_dest
77
 
78
shlr_b_postinc_1:
79
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
80
        set_ccr_zero
81
 
82
        mov     #byte_dest, er0
83
        shlr.b  @er0+   ; shift right logical by one, postinc
84
;;;     .word   0x0174
85
;;;     .word   0x6c08
86
;;;     .word   0x1100
87
 
88
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
89
        test_zero_clear
90
        test_ovf_clear
91
        test_neg_clear
92
 
93
        test_h_gr32 byte_dest+1 er0
94
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
95
        test_gr_a5a5 2
96
        test_gr_a5a5 3
97
        test_gr_a5a5 4
98
        test_gr_a5a5 5
99
        test_gr_a5a5 6
100
        test_gr_a5a5 7
101
        ; 1010 0101 -> 0101 0010
102
        cmp.b   #0x52, @byte_dest
103
        beq     .Lbpostinc1
104
        fail
105
.Lbpostinc1:
106
        mov.b   #0xa5, @byte_dest
107
 
108
shlr_b_postdec_1:
109
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
110
        set_ccr_zero
111
 
112
        mov     #byte_dest, er0
113
        shlr.b  @er0-   ; shift right logical by one, postdec
114
;;;     .word   0x0176
115
;;;     .word   0x6c08
116
;;;     .word   0x1100
117
 
118
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
119
        test_zero_clear
120
        test_ovf_clear
121
        test_neg_clear
122
 
123
        test_h_gr32 byte_dest-1 er0
124
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
125
        test_gr_a5a5 2
126
        test_gr_a5a5 3
127
        test_gr_a5a5 4
128
        test_gr_a5a5 5
129
        test_gr_a5a5 6
130
        test_gr_a5a5 7
131
        ; 1010 0101 -> 0101 0010
132
        cmp.b   #0x52, @byte_dest
133
        beq     .Lbpostdec1
134
        fail
135
.Lbpostdec1:
136
        mov.b   #0xa5, @byte_dest
137
 
138
shlr_b_preinc_1:
139
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
140
        set_ccr_zero
141
 
142
        mov     #byte_dest-1, er0
143
        shlr.b  @+er0   ; shift right logical by one, preinc
144
;;;     .word   0x0175
145
;;;     .word   0x6c08
146
;;;     .word   0x1100
147
 
148
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
149
        test_zero_clear
150
        test_ovf_clear
151
        test_neg_clear
152
 
153
        test_h_gr32 byte_dest er0
154
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
155
        test_gr_a5a5 2
156
        test_gr_a5a5 3
157
        test_gr_a5a5 4
158
        test_gr_a5a5 5
159
        test_gr_a5a5 6
160
        test_gr_a5a5 7
161
        ; 1010 0101 -> 0101 0010
162
        cmp.b   #0x52, @byte_dest
163
        beq     .Lbpreinc1
164
        fail
165
.Lbpreinc1:
166
        mov.b   #0xa5, @byte_dest
167
 
168
shlr_b_predec_1:
169
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
170
        set_ccr_zero
171
 
172
        mov     #byte_dest+1, er0
173
        shlr.b  @-er0   ; shift right logical by one, predec
174
;;;     .word   0x0177
175
;;;     .word   0x6c08
176
;;;     .word   0x1100
177
 
178
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
179
        test_zero_clear
180
        test_ovf_clear
181
        test_neg_clear
182
 
183
        test_h_gr32 byte_dest er0
184
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
185
        test_gr_a5a5 2
186
        test_gr_a5a5 3
187
        test_gr_a5a5 4
188
        test_gr_a5a5 5
189
        test_gr_a5a5 6
190
        test_gr_a5a5 7
191
        ; 1010 0101 -> 0101 0010
192
        cmp.b   #0x52, @byte_dest
193
        beq     .Lbpredec1
194
        fail
195
.Lbpredec1:
196
        mov.b   #0xa5, @byte_dest
197
 
198
shlr_b_disp2_1:
199
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
200
        set_ccr_zero
201
 
202
        mov     #byte_dest-2, er0
203
        shlr.b  @(2:2, er0)     ; shift right logical by one, disp2
204
;;;     .word   0x0176
205
;;;     .word   0x6808
206
;;;     .word   0x1100
207
 
208
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
209
        test_zero_clear
210
        test_ovf_clear
211
        test_neg_clear
212
 
213
        test_h_gr32 byte_dest-2 er0
214
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
215
        test_gr_a5a5 2
216
        test_gr_a5a5 3
217
        test_gr_a5a5 4
218
        test_gr_a5a5 5
219
        test_gr_a5a5 6
220
        test_gr_a5a5 7
221
        ; 1010 0101 -> 0101 0010
222
        cmp.b   #0x52, @byte_dest
223
        beq     .Lbdisp21
224
        fail
225
.Lbdisp21:
226
        mov.b   #0xa5, @byte_dest
227
 
228
shlr_b_disp16_1:
229
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
230
        set_ccr_zero
231
 
232
        mov     #byte_dest-44, er0
233
        shlr.b  @(44:16, er0)   ; shift right logical by one, disp16
234
;;;     .word   0x0174
235
;;;     .word   0x6e08
236
;;;     .word   44
237
;;;     .word   0x1100
238
 
239
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
240
        test_zero_clear
241
        test_ovf_clear
242
        test_neg_clear
243
 
244
        test_h_gr32 byte_dest-44 er0
245
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
246
        test_gr_a5a5 2
247
        test_gr_a5a5 3
248
        test_gr_a5a5 4
249
        test_gr_a5a5 5
250
        test_gr_a5a5 6
251
        test_gr_a5a5 7
252
        ; 1010 0101 -> 0101 0010
253
        cmp.b   #0x52, @byte_dest
254
        beq     .Lbdisp161
255
        fail
256
.Lbdisp161:
257
        mov.b   #0xa5, @byte_dest
258
 
259
shlr_b_disp32_1:
260
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
261
        set_ccr_zero
262
 
263
        mov     #byte_dest-666, er0
264
        shlr.b  @(666:32, er0)  ; shift right logical by one, disp32
265
;;;     .word   0x7884
266
;;;     .word   0x6a28
267
;;;     .long   666
268
;;;     .word   0x1100
269
 
270
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
271
        test_zero_clear
272
        test_ovf_clear
273
        test_neg_clear
274
 
275
        test_h_gr32 byte_dest-666 er0
276
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
277
        test_gr_a5a5 2
278
        test_gr_a5a5 3
279
        test_gr_a5a5 4
280
        test_gr_a5a5 5
281
        test_gr_a5a5 6
282
        test_gr_a5a5 7
283
        ; 1010 0101 -> 0101 0010
284
        cmp.b   #0x52, @byte_dest
285
        beq     .Lbdisp321
286
        fail
287
.Lbdisp321:
288
        mov.b   #0xa5, @byte_dest
289
 
290
shlr_b_abs16_1:
291
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
292
        set_ccr_zero
293
 
294
        shlr.b  @byte_dest:16   ; shift right logical by one, abs16
295
;;;     .word   0x6a18
296
;;;     .word   byte_dest
297
;;;     .word   0x1100
298
 
299
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
300
        test_zero_clear
301
        test_ovf_clear
302
        test_neg_clear
303
 
304
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
305
        test_gr_a5a5 2
306
        test_gr_a5a5 2
307
        test_gr_a5a5 3
308
        test_gr_a5a5 4
309
        test_gr_a5a5 5
310
        test_gr_a5a5 6
311
        test_gr_a5a5 7
312
        ; 1010 0101 -> 0101 0010
313
        cmp.b   #0x52, @byte_dest
314
        beq     .Lbabs161
315
        fail
316
.Lbabs161:
317
        mov.b   #0xa5, @byte_dest
318
 
319
shlr_b_abs32_1:
320
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
321
        set_ccr_zero
322
 
323
        shlr.b  @byte_dest:32   ; shift right logical by one, abs32
324
;;;     .word   0x6a38
325
;;;     .long   byte_dest
326
;;;     .word   0x1100
327
 
328
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
329
        test_zero_clear
330
        test_ovf_clear
331
        test_neg_clear
332
 
333
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
334
        test_gr_a5a5 2
335
        test_gr_a5a5 2
336
        test_gr_a5a5 3
337
        test_gr_a5a5 4
338
        test_gr_a5a5 5
339
        test_gr_a5a5 6
340
        test_gr_a5a5 7
341
        ; 1010 0101 -> 0101 0010
342
        cmp.b   #0x52, @byte_dest
343
        beq     .Lbabs321
344
        fail
345
.Lbabs321:
346
        mov.b   #0xa5, @byte_dest
347
.endif
348
 
349
shlr_b_reg8_2:
350
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
351
        set_ccr_zero
352
 
353
        shlr.b  #2, r0l         ; shift right logical by two
354
;;;     .word   0x1148
355
 
356
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
357
        test_zero_clear
358
        test_ovf_clear
359
        test_neg_clear
360
        test_h_gr16 0xa529 r0   ; 1010 0101 -> 0010 1001
361
.if (sim_cpu)
362
        test_h_gr32 0xa5a5a529 er0
363
.endif
364
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
365
        test_gr_a5a5 2
366
        test_gr_a5a5 3
367
        test_gr_a5a5 4
368
        test_gr_a5a5 5
369
        test_gr_a5a5 6
370
        test_gr_a5a5 7
371
 
372
.if (sim_cpu == h8sx)
373
shlr_b_ind_2:
374
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
375
        set_ccr_zero
376
 
377
        mov     #byte_dest, er0
378
        shlr.b  #2, @er0        ; shift right logical by two, indirect
379
;;;     .word   0x7d00
380
;;;     .word   0x1140
381
 
382
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
383
        test_zero_clear
384
        test_ovf_clear
385
        test_neg_clear
386
 
387
        test_h_gr32 byte_dest er0
388
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
389
        test_gr_a5a5 2
390
        test_gr_a5a5 3
391
        test_gr_a5a5 4
392
        test_gr_a5a5 5
393
        test_gr_a5a5 6
394
        test_gr_a5a5 7
395
        ; 1010 0101 -> 0010 1001
396
        cmp.b   #0x29, @byte_dest
397
        beq     .Lbind2
398
        fail
399
.Lbind2:
400
        mov.b   #0xa5, @byte_dest
401
 
402
shlr_b_postinc_2:
403
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
404
        set_ccr_zero
405
 
406
        mov     #byte_dest, er0
407
        shlr.b  #2, @er0+       ; shift right logical by two, postinc
408
;;;     .word   0x0174
409
;;;     .word   0x6c08
410
;;;     .word   0x1140
411
 
412
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
413
        test_zero_clear
414
        test_ovf_clear
415
        test_neg_clear
416
 
417
        test_h_gr32 byte_dest+1 er0
418
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
419
        test_gr_a5a5 2
420
        test_gr_a5a5 3
421
        test_gr_a5a5 4
422
        test_gr_a5a5 5
423
        test_gr_a5a5 6
424
        test_gr_a5a5 7
425
        ; 1010 0101 -> 0010 1001
426
        cmp.b   #0x29, @byte_dest
427
        beq     .Lbpostinc2
428
        fail
429
.Lbpostinc2:
430
        mov.b   #0xa5, @byte_dest
431
 
432
shlr_b_postdec_2:
433
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
434
        set_ccr_zero
435
 
436
        mov     #byte_dest, er0
437
        shlr.b  #2, @er0-       ; shift right logical by two, postdec
438
;;;     .word   0x0176
439
;;;     .word   0x6c08
440
;;;     .word   0x1140
441
 
442
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
443
        test_zero_clear
444
        test_ovf_clear
445
        test_neg_clear
446
 
447
        test_h_gr32 byte_dest-1 er0
448
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
449
        test_gr_a5a5 2
450
        test_gr_a5a5 3
451
        test_gr_a5a5 4
452
        test_gr_a5a5 5
453
        test_gr_a5a5 6
454
        test_gr_a5a5 7
455
        ; 1010 0101 -> 0010 1001
456
        cmp.b   #0x29, @byte_dest
457
        beq     .Lbpostdec2
458
        fail
459
.Lbpostdec2:
460
        mov.b   #0xa5, @byte_dest
461
 
462
shlr_b_preinc_2:
463
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
464
        set_ccr_zero
465
 
466
        mov     #byte_dest-1, er0
467
        shlr.b  #2, @+er0       ; shift right logical by two, preinc
468
;;;     .word   0x0175
469
;;;     .word   0x6c08
470
;;;     .word   0x1140
471
 
472
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
473
        test_zero_clear
474
        test_ovf_clear
475
        test_neg_clear
476
 
477
        test_h_gr32 byte_dest er0
478
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
479
        test_gr_a5a5 2
480
        test_gr_a5a5 3
481
        test_gr_a5a5 4
482
        test_gr_a5a5 5
483
        test_gr_a5a5 6
484
        test_gr_a5a5 7
485
        ; 1010 0101 -> 0010 1001
486
        cmp.b   #0x29, @byte_dest
487
        beq     .Lbpreinc2
488
        fail
489
.Lbpreinc2:
490
        mov.b   #0xa5, @byte_dest
491
 
492
shlr_b_predec_2:
493
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
494
        set_ccr_zero
495
 
496
        mov     #byte_dest+1, er0
497
        shlr.b  #2, @-er0       ; shift right logical by two, predec
498
;;;     .word   0x0177
499
;;;     .word   0x6c08
500
;;;     .word   0x1140
501
 
502
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
503
        test_zero_clear
504
        test_ovf_clear
505
        test_neg_clear
506
 
507
        test_h_gr32 byte_dest er0
508
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
509
        test_gr_a5a5 2
510
        test_gr_a5a5 3
511
        test_gr_a5a5 4
512
        test_gr_a5a5 5
513
        test_gr_a5a5 6
514
        test_gr_a5a5 7
515
        ; 1010 0101 -> 0010 1001
516
        cmp.b   #0x29, @byte_dest
517
        beq     .Lbpredec2
518
        fail
519
.Lbpredec2:
520
        mov.b   #0xa5, @byte_dest
521
 
522
shlr_b_disp2_2:
523
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
524
        set_ccr_zero
525
 
526
        mov     #byte_dest-2, er0
527
        shlr.b  #2, @(2:2, er0) ; shift right logical by two, disp2
528
;;;     .word   0x0176
529
;;;     .word   0x6808
530
;;;     .word   0x1140
531
 
532
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
533
        test_zero_clear
534
        test_ovf_clear
535
        test_neg_clear
536
 
537
        test_h_gr32 byte_dest-2 er0
538
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
539
        test_gr_a5a5 2
540
        test_gr_a5a5 3
541
        test_gr_a5a5 4
542
        test_gr_a5a5 5
543
        test_gr_a5a5 6
544
        test_gr_a5a5 7
545
        ; 1010 0101 -> 0010 1001
546
        cmp.b   #0x29, @byte_dest
547
        beq     .Lbdisp22
548
        fail
549
.Lbdisp22:
550
        mov.b   #0xa5, @byte_dest
551
 
552
shlr_b_disp16_2:
553
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
554
        set_ccr_zero
555
 
556
        mov     #byte_dest-44, er0
557
        shlr.b  #2, @(44:16, er0)       ; shift right logical by two, disp16
558
;;;     .word   0x0174
559
;;;     .word   0x6e08
560
;;;     .word   44
561
;;;     .word   0x1140
562
 
563
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
564
        test_zero_clear
565
        test_ovf_clear
566
        test_neg_clear
567
 
568
        test_h_gr32 byte_dest-44 er0
569
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
570
        test_gr_a5a5 2
571
        test_gr_a5a5 3
572
        test_gr_a5a5 4
573
        test_gr_a5a5 5
574
        test_gr_a5a5 6
575
        test_gr_a5a5 7
576
        ; 1010 0101 -> 0010 1001
577
        cmp.b   #0x29, @byte_dest
578
        beq     .Lbdisp162
579
        fail
580
.Lbdisp162:
581
        mov.b   #0xa5, @byte_dest
582
 
583
shlr_b_disp32_2:
584
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
585
        set_ccr_zero
586
 
587
        mov     #byte_dest-666, er0
588
        shlr.b  #2, @(666:32, er0)      ; shift right logical by two, disp32
589
;;;     .word   0x7884
590
;;;     .word   0x6a28
591
;;;     .long   666
592
;;;     .word   0x1140
593
 
594
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
595
        test_zero_clear
596
        test_ovf_clear
597
        test_neg_clear
598
 
599
        test_h_gr32 byte_dest-666 er0
600
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
601
        test_gr_a5a5 2
602
        test_gr_a5a5 3
603
        test_gr_a5a5 4
604
        test_gr_a5a5 5
605
        test_gr_a5a5 6
606
        test_gr_a5a5 7
607
        ; 1010 0101 -> 0010 1001
608
        cmp.b   #0x29, @byte_dest
609
        beq     .Lbdisp322
610
        fail
611
.Lbdisp322:
612
        mov.b   #0xa5, @byte_dest
613
 
614
shlr_b_abs16_2:
615
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
616
        set_ccr_zero
617
 
618
        shlr.b  #2, @byte_dest:16       ; shift right logical by two, abs16
619
;;;     .word   0x6a18
620
;;;     .word   byte_dest
621
;;;     .word   0x1140
622
 
623
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
624
        test_zero_clear
625
        test_ovf_clear
626
        test_neg_clear
627
 
628
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
629
        test_gr_a5a5 2
630
        test_gr_a5a5 2
631
        test_gr_a5a5 3
632
        test_gr_a5a5 4
633
        test_gr_a5a5 5
634
        test_gr_a5a5 6
635
        test_gr_a5a5 7
636
        ; 1010 0101 -> 0010 1001
637
        cmp.b   #0x29, @byte_dest
638
        beq     .Lbabs162
639
        fail
640
.Lbabs162:
641
        mov.b   #0xa5, @byte_dest
642
 
643
shlr_b_abs32_2:
644
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
645
        set_ccr_zero
646
 
647
        shlr.b  #2, @byte_dest:32       ; shift right logical by two, abs32
648
;;;     .word   0x6a38
649
;;;     .long   byte_dest
650
;;;     .word   0x1140
651
 
652
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
653
        test_zero_clear
654
        test_ovf_clear
655
        test_neg_clear
656
 
657
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
658
        test_gr_a5a5 2
659
        test_gr_a5a5 2
660
        test_gr_a5a5 3
661
        test_gr_a5a5 4
662
        test_gr_a5a5 5
663
        test_gr_a5a5 6
664
        test_gr_a5a5 7
665
        ; 1010 0101 -> 0010 1001
666
        cmp.b   #0x29, @byte_dest
667
        beq     .Lbabs322
668
        fail
669
.Lbabs322:
670
        mov.b   #0xa5, @byte_dest
671
 
672
shlr_b_reg8_4:
673
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
674
        set_ccr_zero
675
 
676
        shlr.b  #4, r0l         ; shift right logical by four
677
;;;     .word   0x11a8
678
 
679
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
680
        test_zero_clear
681
        test_ovf_clear
682
        test_neg_clear
683
 
684
        test_h_gr16 0xa50a r0   ; 1010 0101 -> 0000 1010 
685
        test_h_gr32 0xa5a5a50a er0
686
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
687
        test_gr_a5a5 2
688
        test_gr_a5a5 3
689
        test_gr_a5a5 4
690
        test_gr_a5a5 5
691
        test_gr_a5a5 6
692
        test_gr_a5a5 7
693
 
694
shlr_b_reg8_reg8:
695
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
696
        set_ccr_zero
697
 
698
        mov     #5, r0h
699
        shlr.b  r0h, r0l        ; shift right logical by register value
700
 
701
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
702
        test_zero_clear
703
        test_ovf_clear
704
        test_neg_clear
705
 
706
        test_h_gr16 0x0505 r0   ; 1010 0101 -> 0000 0101
707
        test_h_gr32 0xa5a50505 er0
708
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
709
        test_gr_a5a5 2
710
        test_gr_a5a5 3
711
        test_gr_a5a5 4
712
        test_gr_a5a5 5
713
        test_gr_a5a5 6
714
        test_gr_a5a5 7
715
 
716
shlr_b_ind_4:
717
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
718
        set_ccr_zero
719
 
720
        mov     #byte_dest, er0
721
        shlr.b  #4, @er0        ; shift right logical by four, indirect
722
;;;     .word   0x7d00
723
;;;     .word   0x11a0
724
 
725
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
726
        test_zero_clear
727
        test_ovf_clear
728
        test_neg_clear
729
 
730
        test_h_gr32 byte_dest er0
731
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
732
        test_gr_a5a5 2
733
        test_gr_a5a5 3
734
        test_gr_a5a5 4
735
        test_gr_a5a5 5
736
        test_gr_a5a5 6
737
        test_gr_a5a5 7
738
        ; 1010 0101 -> 0000 1010 
739
        cmp.b   #0x0a, @byte_dest
740
        beq     .Lbind4
741
        fail
742
.Lbind4:
743
        mov.b   #0xa5, @byte_dest
744
 
745
shlr_b_postinc_4:
746
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
747
        set_ccr_zero
748
 
749
        mov     #byte_dest, er0
750
        shlr.b  #4, @er0+       ; shift right logical by four, postinc
751
;;;     .word   0x0174
752
;;;     .word   0x6c08
753
;;;     .word   0x11a0
754
 
755
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
756
        test_zero_clear
757
        test_ovf_clear
758
        test_neg_clear
759
 
760
        test_h_gr32 byte_dest+1 er0
761
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
762
        test_gr_a5a5 2
763
        test_gr_a5a5 3
764
        test_gr_a5a5 4
765
        test_gr_a5a5 5
766
        test_gr_a5a5 6
767
        test_gr_a5a5 7
768
        ; 1010 0101 -> 0000 1010 
769
        cmp.b   #0x0a, @byte_dest
770
        beq     .Lbpostinc4
771
        fail
772
.Lbpostinc4:
773
        mov.b   #0xa5, @byte_dest
774
 
775
shlr_b_postdec_4:
776
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
777
        set_ccr_zero
778
 
779
        mov     #byte_dest, er0
780
        shlr.b  #4, @er0-       ; shift right logical by four, postdec
781
;;;     .word   0x0176
782
;;;     .word   0x6c08
783
;;;     .word   0x11a0
784
 
785
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
786
        test_zero_clear
787
        test_ovf_clear
788
        test_neg_clear
789
 
790
        test_h_gr32 byte_dest-1 er0
791
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
792
        test_gr_a5a5 2
793
        test_gr_a5a5 3
794
        test_gr_a5a5 4
795
        test_gr_a5a5 5
796
        test_gr_a5a5 6
797
        test_gr_a5a5 7
798
        ; 1010 0101 -> 0000 1010 
799
        cmp.b   #0x0a, @byte_dest
800
        beq     .Lbpostdec4
801
        fail
802
.Lbpostdec4:
803
        mov.b   #0xa5, @byte_dest
804
 
805
shlr_b_preinc_4:
806
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
807
        set_ccr_zero
808
 
809
        mov     #byte_dest-1, er0
810
        shlr.b  #4, @+er0       ; shift right logical by four, preinc
811
;;;     .word   0x0175
812
;;;     .word   0x6c08
813
;;;     .word   0x11a0
814
 
815
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
816
        test_zero_clear
817
        test_ovf_clear
818
        test_neg_clear
819
 
820
        test_h_gr32 byte_dest er0
821
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
822
        test_gr_a5a5 2
823
        test_gr_a5a5 3
824
        test_gr_a5a5 4
825
        test_gr_a5a5 5
826
        test_gr_a5a5 6
827
        test_gr_a5a5 7
828
        ; 1010 0101 -> 0000 1010 
829
        cmp.b   #0x0a, @byte_dest
830
        beq     .Lbpreinc4
831
        fail
832
.Lbpreinc4:
833
        mov.b   #0xa5, @byte_dest
834
 
835
shlr_b_predec_4:
836
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
837
        set_ccr_zero
838
 
839
        mov     #byte_dest+1, er0
840
        shlr.b  #4, @-er0       ; shift right logical by four, predec
841
;;;     .word   0x0177
842
;;;     .word   0x6c08
843
;;;     .word   0x11a0
844
 
845
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
846
        test_zero_clear
847
        test_ovf_clear
848
        test_neg_clear
849
 
850
        test_h_gr32 byte_dest er0
851
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
852
        test_gr_a5a5 2
853
        test_gr_a5a5 3
854
        test_gr_a5a5 4
855
        test_gr_a5a5 5
856
        test_gr_a5a5 6
857
        test_gr_a5a5 7
858
        ; 1010 0101 -> 0000 1010 
859
        cmp.b   #0x0a, @byte_dest
860
        beq     .Lbpredec4
861
        fail
862
.Lbpredec4:
863
        mov.b   #0xa5, @byte_dest
864
 
865
shlr_b_disp2_4:
866
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
867
        set_ccr_zero
868
 
869
        mov     #byte_dest-2, er0
870
        shlr.b  #4, @(2:2, er0) ; shift right logical by four, disp2
871
;;;     .word   0x0176
872
;;;     .word   0x6808
873
;;;     .word   0x11a0
874
 
875
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
876
        test_zero_clear
877
        test_ovf_clear
878
        test_neg_clear
879
 
880
        test_h_gr32 byte_dest-2 er0
881
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
882
        test_gr_a5a5 2
883
        test_gr_a5a5 3
884
        test_gr_a5a5 4
885
        test_gr_a5a5 5
886
        test_gr_a5a5 6
887
        test_gr_a5a5 7
888
        ; 1010 0101 -> 0000 1010 
889
        cmp.b   #0x0a, @byte_dest
890
        beq     .Lbdisp24
891
        fail
892
.Lbdisp24:
893
        mov.b   #0xa5, @byte_dest
894
 
895
shlr_b_disp16_4:
896
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
897
        set_ccr_zero
898
 
899
        mov     #byte_dest-44, er0
900
        shlr.b  #4, @(44:16, er0)       ; shift right logical by four, disp16
901
;;;     .word   0x0174
902
;;;     .word   0x6e08
903
;;;     .word   44
904
;;;     .word   0x11a0
905
 
906
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
907
        test_zero_clear
908
        test_ovf_clear
909
        test_neg_clear
910
 
911
        test_h_gr32 byte_dest-44 er0
912
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
913
        test_gr_a5a5 2
914
        test_gr_a5a5 3
915
        test_gr_a5a5 4
916
        test_gr_a5a5 5
917
        test_gr_a5a5 6
918
        test_gr_a5a5 7
919
        ; 1010 0101 -> 0000 1010 
920
        cmp.b   #0x0a, @byte_dest
921
        beq     .Lbdisp164
922
        fail
923
.Lbdisp164:
924
        mov.b   #0xa5, @byte_dest
925
 
926
shlr_b_disp32_4:
927
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
928
        set_ccr_zero
929
 
930
        mov     #byte_dest-666, er0
931
        shlr.b  #4, @(666:32, er0)      ; shift right logical by four, disp32
932
;;;     .word   0x7884
933
;;;     .word   0x6a28
934
;;;     .long   666
935
;;;     .word   0x11a0
936
 
937
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
938
        test_zero_clear
939
        test_ovf_clear
940
        test_neg_clear
941
 
942
        test_h_gr32 byte_dest-666 er0
943
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
944
        test_gr_a5a5 2
945
        test_gr_a5a5 3
946
        test_gr_a5a5 4
947
        test_gr_a5a5 5
948
        test_gr_a5a5 6
949
        test_gr_a5a5 7
950
        ; 1010 0101 -> 0000 1010 
951
        cmp.b   #0x0a, @byte_dest
952
        beq     .Lbdisp324
953
        fail
954
.Lbdisp324:
955
        mov.b   #0xa5, @byte_dest
956
 
957
shlr_b_abs16_4:
958
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
959
        set_ccr_zero
960
 
961
        shlr.b  #4, @byte_dest:16       ; shift right logical by four, abs16
962
;;;     .word   0x6a18
963
;;;     .word   byte_dest
964
;;;     .word   0x11a0
965
 
966
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
967
        test_zero_clear
968
        test_ovf_clear
969
        test_neg_clear
970
 
971
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
972
        test_gr_a5a5 2
973
        test_gr_a5a5 2
974
        test_gr_a5a5 3
975
        test_gr_a5a5 4
976
        test_gr_a5a5 5
977
        test_gr_a5a5 6
978
        test_gr_a5a5 7
979
        ; 1010 0101 -> 0000 1010 
980
        cmp.b   #0x0a, @byte_dest
981
        beq     .Lbabs164
982
        fail
983
.Lbabs164:
984
        mov.b   #0xa5, @byte_dest
985
 
986
shlr_b_abs32_4:
987
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
988
        set_ccr_zero
989
 
990
        shlr.b  #4, @byte_dest:32       ; shift right logical by four, abs32
991
;;;     .word   0x6a38
992
;;;     .long   byte_dest
993
;;;     .word   0x11a0
994
 
995
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
996
        test_zero_clear
997
        test_ovf_clear
998
        test_neg_clear
999
 
1000
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
1001
        test_gr_a5a5 2
1002
        test_gr_a5a5 2
1003
        test_gr_a5a5 3
1004
        test_gr_a5a5 4
1005
        test_gr_a5a5 5
1006
        test_gr_a5a5 6
1007
        test_gr_a5a5 7
1008
        ; 1010 0101 -> 0000 1010 
1009
        cmp.b   #0x0a, @byte_dest
1010
        beq     .Lbabs324
1011
        fail
1012
.Lbabs324:
1013
        mov.b   #0xa5, @byte_dest
1014
.endif
1015
 
1016
.if (sim_cpu == h8sx)
1017
shlr_w_imm5_1:
1018
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1019
        set_ccr_zero
1020
 
1021
        shlr.w  #15:5, r0       ; shift right logical by 5-bit immediate
1022
;;;     .word   0x038f
1023
;;;     .word   0x1110
1024
 
1025
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
1026
        test_zero_clear
1027
        test_ovf_clear
1028
        test_neg_clear
1029
 
1030
        ; 1010 0101 1010 0101 -> 0000 0000 0000 0001
1031
        test_h_gr32 0xa5a50001 er0
1032
 
1033
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1034
        test_gr_a5a5 2
1035
        test_gr_a5a5 3
1036
        test_gr_a5a5 4
1037
        test_gr_a5a5 5
1038
        test_gr_a5a5 6
1039
        test_gr_a5a5 7
1040
.endif
1041
 
1042
.if (sim_cpu)                   ; Not available in h8300 mode
1043
shlr_w_reg16_1:
1044
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1045
        set_ccr_zero
1046
 
1047
        shlr.w  r0              ; shift right logical by one
1048
;;;     .word   0x1110
1049
 
1050
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
1051
        test_zero_clear
1052
        test_ovf_clear
1053
        test_neg_clear
1054
        test_h_gr16 0x52d2 r0   ; 1010 0101 1010 0101 -> 0101 0010 1101 0010
1055
        test_h_gr32 0xa5a552d2 er0
1056
 
1057
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1058
        test_gr_a5a5 2
1059
        test_gr_a5a5 3
1060
        test_gr_a5a5 4
1061
        test_gr_a5a5 5
1062
        test_gr_a5a5 6
1063
        test_gr_a5a5 7
1064
 
1065
.if (sim_cpu == h8sx)
1066
shlr_w_ind_1:
1067
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1068
        set_ccr_zero
1069
 
1070
        mov     #word_dest, er0
1071
        shlr.w  @er0    ; shift right logical by one, indirect
1072
;;;     .word   0x7d80
1073
;;;     .word   0x1110
1074
 
1075
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
1076
        test_zero_clear
1077
        test_ovf_clear
1078
        test_neg_clear
1079
 
1080
        test_h_gr32 word_dest er0
1081
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1082
        test_gr_a5a5 2
1083
        test_gr_a5a5 3
1084
        test_gr_a5a5 4
1085
        test_gr_a5a5 5
1086
        test_gr_a5a5 6
1087
        test_gr_a5a5 7
1088
        ; 1010 0101 1010 0101 -> 0101 0010 1101 0010 
1089
        cmp.w   #0x52d2, @word_dest
1090
        beq     .Lwind1
1091
        fail
1092
.Lwind1:
1093
        mov.w   #0xa5a5, @word_dest
1094
 
1095
shlr_w_postinc_1:
1096
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1097
        set_ccr_zero
1098
 
1099
        mov     #word_dest, er0
1100
        shlr.w  @er0+   ; shift right logical by one, postinc
1101
;;;     .word   0x0154
1102
;;;     .word   0x6d08
1103
;;;     .word   0x1110
1104
 
1105
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
1106
        test_zero_clear
1107
        test_ovf_clear
1108
        test_neg_clear
1109
 
1110
        test_h_gr32 word_dest+2 er0
1111
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1112
        test_gr_a5a5 2
1113
        test_gr_a5a5 3
1114
        test_gr_a5a5 4
1115
        test_gr_a5a5 5
1116
        test_gr_a5a5 6
1117
        test_gr_a5a5 7
1118
        ; 1010 0101 1010 0101 -> 0101 0010 1101 0010 
1119
        cmp.w   #0x52d2, @word_dest
1120
        beq     .Lwpostinc1
1121
        fail
1122
.Lwpostinc1:
1123
        mov.w   #0xa5a5, @word_dest
1124
 
1125
shlr_w_postdec_1:
1126
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1127
        set_ccr_zero
1128
 
1129
        mov     #word_dest, er0
1130
        shlr.w  @er0-   ; shift right logical by one, postdec
1131
;;;     .word   0x0156
1132
;;;     .word   0x6d08
1133
;;;     .word   0x1110
1134
 
1135
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
1136
        test_zero_clear
1137
        test_ovf_clear
1138
        test_neg_clear
1139
 
1140
        test_h_gr32 word_dest-2 er0
1141
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1142
        test_gr_a5a5 2
1143
        test_gr_a5a5 3
1144
        test_gr_a5a5 4
1145
        test_gr_a5a5 5
1146
        test_gr_a5a5 6
1147
        test_gr_a5a5 7
1148
        ; 1010 0101 1010 0101 -> 0101 0010 1101 0010 
1149
        cmp.w   #0x52d2, @word_dest
1150
        beq     .Lwpostdec1
1151
        fail
1152
.Lwpostdec1:
1153
        mov.w   #0xa5a5, @word_dest
1154
 
1155
shlr_w_preinc_1:
1156
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1157
        set_ccr_zero
1158
 
1159
        mov     #word_dest-2, er0
1160
        shlr.w  @+er0   ; shift right logical by one, preinc
1161
;;;     .word   0x0155
1162
;;;     .word   0x6d08
1163
;;;     .word   0x1110
1164
 
1165
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
1166
        test_zero_clear
1167
        test_ovf_clear
1168
        test_neg_clear
1169
 
1170
        test_h_gr32 word_dest er0
1171
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1172
        test_gr_a5a5 2
1173
        test_gr_a5a5 3
1174
        test_gr_a5a5 4
1175
        test_gr_a5a5 5
1176
        test_gr_a5a5 6
1177
        test_gr_a5a5 7
1178
        ; 1010 0101 1010 0101 -> 0101 0010 1101 0010 
1179
        cmp.w   #0x52d2, @word_dest
1180
        beq     .Lwpreinc1
1181
        fail
1182
.Lwpreinc1:
1183
        mov.w   #0xa5a5, @word_dest
1184
 
1185
shlr_w_predec_1:
1186
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1187
        set_ccr_zero
1188
 
1189
        mov     #word_dest+2, er0
1190
        shlr.w  @-er0   ; shift right logical by one, predec
1191
;;;     .word   0x0157
1192
;;;     .word   0x6d08
1193
;;;     .word   0x1110
1194
 
1195
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
1196
        test_zero_clear
1197
        test_ovf_clear
1198
        test_neg_clear
1199
 
1200
        test_h_gr32 word_dest er0
1201
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1202
        test_gr_a5a5 2
1203
        test_gr_a5a5 3
1204
        test_gr_a5a5 4
1205
        test_gr_a5a5 5
1206
        test_gr_a5a5 6
1207
        test_gr_a5a5 7
1208
        ; 1010 0101 1010 0101 -> 0101 0010 1101 0010 
1209
        cmp.w   #0x52d2, @word_dest
1210
        beq     .Lwpredec1
1211
        fail
1212
.Lwpredec1:
1213
        mov.w   #0xa5a5, @word_dest
1214
 
1215
shlr_w_disp2_1:
1216
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1217
        set_ccr_zero
1218
 
1219
        mov     #word_dest-4, er0
1220
        shlr.w  @(4:2, er0)     ; shift right logical by one, disp2
1221
;;;     .word   0x0156
1222
;;;     .word   0x6908
1223
;;;     .word   0x1110
1224
 
1225
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
1226
        test_zero_clear
1227
        test_ovf_clear
1228
        test_neg_clear
1229
 
1230
        test_h_gr32 word_dest-4 er0
1231
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1232
        test_gr_a5a5 2
1233
        test_gr_a5a5 3
1234
        test_gr_a5a5 4
1235
        test_gr_a5a5 5
1236
        test_gr_a5a5 6
1237
        test_gr_a5a5 7
1238
        ; 1010 0101 1010 0101 -> 0101 0010 1101 0010 
1239
        cmp.w   #0x52d2, @word_dest
1240
        beq     .Lwdisp21
1241
        fail
1242
.Lwdisp21:
1243
        mov.w   #0xa5a5, @word_dest
1244
 
1245
shlr_w_disp16_1:
1246
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1247
        set_ccr_zero
1248
 
1249
        mov     #word_dest-44, er0
1250
        shlr.w  @(44:16, er0)   ; shift right logical by one, disp16
1251
;;;     .word   0x0154
1252
;;;     .word   0x6f08
1253
;;;     .word   44
1254
;;;     .word   0x1110
1255
 
1256
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
1257
        test_zero_clear
1258
        test_ovf_clear
1259
        test_neg_clear
1260
 
1261
        test_h_gr32 word_dest-44 er0
1262
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1263
        test_gr_a5a5 2
1264
        test_gr_a5a5 3
1265
        test_gr_a5a5 4
1266
        test_gr_a5a5 5
1267
        test_gr_a5a5 6
1268
        test_gr_a5a5 7
1269
        ; 1010 0101 1010 0101 -> 0101 0010 1101 0010 
1270
        cmp.w   #0x52d2, @word_dest
1271
        beq     .Lwdisp161
1272
        fail
1273
.Lwdisp161:
1274
        mov.w   #0xa5a5, @word_dest
1275
 
1276
shlr_w_disp32_1:
1277
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1278
        set_ccr_zero
1279
 
1280
        mov     #word_dest-666, er0
1281
        shlr.w  @(666:32, er0)  ; shift right logical by one, disp32
1282
;;;     .word   0x7884
1283
;;;     .word   0x6b28
1284
;;;     .long   666
1285
;;;     .word   0x1110
1286
 
1287
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
1288
        test_zero_clear
1289
        test_ovf_clear
1290
        test_neg_clear
1291
 
1292
        test_h_gr32 word_dest-666 er0
1293
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1294
        test_gr_a5a5 2
1295
        test_gr_a5a5 3
1296
        test_gr_a5a5 4
1297
        test_gr_a5a5 5
1298
        test_gr_a5a5 6
1299
        test_gr_a5a5 7
1300
        ; 1010 0101 1010 0101 -> 0101 0010 1101 0010 
1301
        cmp.w   #0x52d2, @word_dest
1302
        beq     .Lwdisp321
1303
        fail
1304
.Lwdisp321:
1305
        mov.w   #0xa5a5, @word_dest
1306
 
1307
shlr_w_abs16_1:
1308
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1309
        set_ccr_zero
1310
 
1311
        shlr.w  @word_dest:16   ; shift right logical by one, abs16
1312
;;;     .word   0x6b18
1313
;;;     .word   word_dest
1314
;;;     .word   0x1110
1315
 
1316
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
1317
        test_zero_clear
1318
        test_ovf_clear
1319
        test_neg_clear
1320
 
1321
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
1322
        test_gr_a5a5 1
1323
        test_gr_a5a5 2
1324
        test_gr_a5a5 3
1325
        test_gr_a5a5 4
1326
        test_gr_a5a5 5
1327
        test_gr_a5a5 6
1328
        test_gr_a5a5 7
1329
        ; 1010 0101 1010 0101 -> 0101 0010 1101 0010 
1330
        cmp.w   #0x52d2, @word_dest
1331
        beq     .Lwabs161
1332
        fail
1333
.Lwabs161:
1334
        mov.w   #0xa5a5, @word_dest
1335
 
1336
shlr_w_abs32_1:
1337
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1338
        set_ccr_zero
1339
 
1340
        shlr.w  @word_dest:32   ; shift right logical by one, abs32
1341
;;;     .word   0x6b38
1342
;;;     .long   word_dest
1343
;;;     .word   0x1110
1344
 
1345
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
1346
        test_zero_clear
1347
        test_ovf_clear
1348
        test_neg_clear
1349
 
1350
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
1351
        test_gr_a5a5 1
1352
        test_gr_a5a5 2
1353
        test_gr_a5a5 3
1354
        test_gr_a5a5 4
1355
        test_gr_a5a5 5
1356
        test_gr_a5a5 6
1357
        test_gr_a5a5 7
1358
        ; 1010 0101 1010 0101 -> 0101 0010 1101 0010 
1359
        cmp.w   #0x52d2, @word_dest
1360
        beq     .Lwabs321
1361
        fail
1362
.Lwabs321:
1363
        mov.w   #0xa5a5, @word_dest
1364
.endif
1365
 
1366
shlr_w_reg16_2:
1367
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1368
        set_ccr_zero
1369
 
1370
        shlr.w  #2, r0          ; shift right logical by two
1371
;;;     .word   0x1150
1372
 
1373
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
1374
        test_zero_clear
1375
        test_ovf_clear
1376
        test_neg_clear
1377
 
1378
        test_h_gr16 0x2969 r0   ; 1010 0101 1010 0101 -> 0010 1001 0110 1001
1379
        test_h_gr32 0xa5a52969 er0
1380
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1381
        test_gr_a5a5 2
1382
        test_gr_a5a5 3
1383
        test_gr_a5a5 4
1384
        test_gr_a5a5 5
1385
        test_gr_a5a5 6
1386
        test_gr_a5a5 7
1387
 
1388
.if (sim_cpu == h8sx)
1389
shlr_w_ind_2:
1390
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1391
        set_ccr_zero
1392
 
1393
        mov     #word_dest, er0
1394
        shlr.w  #2, @er0        ; shift right logical by two, indirect
1395
;;;     .word   0x7d80
1396
;;;     .word   0x1150
1397
 
1398
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1399
        test_zero_clear
1400
        test_ovf_clear
1401
        test_neg_clear
1402
 
1403
        test_h_gr32 word_dest er0
1404
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1405
        test_gr_a5a5 2
1406
        test_gr_a5a5 3
1407
        test_gr_a5a5 4
1408
        test_gr_a5a5 5
1409
        test_gr_a5a5 6
1410
        test_gr_a5a5 7
1411
        ; 1010 0101 1010 0101 -> 0010 1001 0110 1001  
1412
        cmp.w   #0x2969, @word_dest
1413
        beq     .Lwind2
1414
        fail
1415
.Lwind2:
1416
        mov.w   #0xa5a5, @word_dest
1417
 
1418
shlr_w_postinc_2:
1419
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1420
        set_ccr_zero
1421
 
1422
        mov     #word_dest, er0
1423
        shlr.w  #2, @er0+       ; shift right logical by two, postinc
1424
;;;     .word   0x0154
1425
;;;     .word   0x6d08
1426
;;;     .word   0x1150
1427
 
1428
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1429
        test_zero_clear
1430
        test_ovf_clear
1431
        test_neg_clear
1432
 
1433
        test_h_gr32 word_dest+2 er0
1434
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1435
        test_gr_a5a5 2
1436
        test_gr_a5a5 3
1437
        test_gr_a5a5 4
1438
        test_gr_a5a5 5
1439
        test_gr_a5a5 6
1440
        test_gr_a5a5 7
1441
        ; 1010 0101 1010 0101 -> 0010 1001 0110 1001  
1442
        cmp.w   #0x2969, @word_dest
1443
        beq     .Lwpostinc2
1444
        fail
1445
.Lwpostinc2:
1446
        mov.w   #0xa5a5, @word_dest
1447
 
1448
shlr_w_postdec_2:
1449
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1450
        set_ccr_zero
1451
 
1452
        mov     #word_dest, er0
1453
        shlr.w  #2, @er0-       ; shift right logical by two, postdec
1454
;;;     .word   0x0156
1455
;;;     .word   0x6d08
1456
;;;     .word   0x1150
1457
 
1458
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1459
        test_zero_clear
1460
        test_ovf_clear
1461
        test_neg_clear
1462
 
1463
        test_h_gr32 word_dest-2 er0
1464
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1465
        test_gr_a5a5 2
1466
        test_gr_a5a5 3
1467
        test_gr_a5a5 4
1468
        test_gr_a5a5 5
1469
        test_gr_a5a5 6
1470
        test_gr_a5a5 7
1471
        ; 1010 0101 1010 0101 -> 0010 1001 0110 1001  
1472
        cmp.w   #0x2969, @word_dest
1473
        beq     .Lwpostdec2
1474
        fail
1475
.Lwpostdec2:
1476
        mov.w   #0xa5a5, @word_dest
1477
 
1478
shlr_w_preinc_2:
1479
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1480
        set_ccr_zero
1481
 
1482
        mov     #word_dest-2, er0
1483
        shlr.w  #2, @+er0       ; shift right logical by two, preinc
1484
;;;     .word   0x0155
1485
;;;     .word   0x6d08
1486
;;;     .word   0x1150
1487
 
1488
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1489
        test_zero_clear
1490
        test_ovf_clear
1491
        test_neg_clear
1492
 
1493
        test_h_gr32 word_dest er0
1494
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1495
        test_gr_a5a5 2
1496
        test_gr_a5a5 3
1497
        test_gr_a5a5 4
1498
        test_gr_a5a5 5
1499
        test_gr_a5a5 6
1500
        test_gr_a5a5 7
1501
        ; 1010 0101 1010 0101 -> 0010 1001 0110 1001  
1502
        cmp.w   #0x2969, @word_dest
1503
        beq     .Lwpreinc2
1504
        fail
1505
.Lwpreinc2:
1506
        mov.w   #0xa5a5, @word_dest
1507
 
1508
shlr_w_predec_2:
1509
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1510
        set_ccr_zero
1511
 
1512
        mov     #word_dest+2, er0
1513
        shlr.w  #2, @-er0       ; shift right logical by two, predec
1514
;;;     .word   0x0157
1515
;;;     .word   0x6d08
1516
;;;     .word   0x1150
1517
 
1518
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1519
        test_zero_clear
1520
        test_ovf_clear
1521
        test_neg_clear
1522
 
1523
        test_h_gr32 word_dest er0
1524
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1525
        test_gr_a5a5 2
1526
        test_gr_a5a5 3
1527
        test_gr_a5a5 4
1528
        test_gr_a5a5 5
1529
        test_gr_a5a5 6
1530
        test_gr_a5a5 7
1531
        ; 1010 0101 1010 0101 -> 0010 1001 0110 1001  
1532
        cmp.w   #0x2969, @word_dest
1533
        beq     .Lwpredec2
1534
        fail
1535
.Lwpredec2:
1536
        mov.w   #0xa5a5, @word_dest
1537
 
1538
shlr_w_disp2_2:
1539
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1540
        set_ccr_zero
1541
 
1542
        mov     #word_dest-4, er0
1543
        shlr.w  #2, @(4:2, er0) ; shift right logical by two, disp2
1544
;;;     .word   0x0156
1545
;;;     .word   0x6908
1546
;;;     .word   0x1150
1547
 
1548
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1549
        test_zero_clear
1550
        test_ovf_clear
1551
        test_neg_clear
1552
 
1553
        test_h_gr32 word_dest-4 er0
1554
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1555
        test_gr_a5a5 2
1556
        test_gr_a5a5 3
1557
        test_gr_a5a5 4
1558
        test_gr_a5a5 5
1559
        test_gr_a5a5 6
1560
        test_gr_a5a5 7
1561
        ; 1010 0101 1010 0101 -> 0010 1001 0110 1001  
1562
        cmp.w   #0x2969, @word_dest
1563
        beq     .Lwdisp22
1564
        fail
1565
.Lwdisp22:
1566
        mov.w   #0xa5a5, @word_dest
1567
 
1568
shlr_w_disp16_2:
1569
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1570
        set_ccr_zero
1571
 
1572
        mov     #word_dest-44, er0
1573
        shlr.w  #2, @(44:16, er0)       ; shift right logical by two, disp16
1574
;;;     .word   0x0154
1575
;;;     .word   0x6f08
1576
;;;     .word   44
1577
;;;     .word   0x1150
1578
 
1579
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1580
        test_zero_clear
1581
        test_ovf_clear
1582
        test_neg_clear
1583
 
1584
        test_h_gr32 word_dest-44 er0
1585
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1586
        test_gr_a5a5 2
1587
        test_gr_a5a5 3
1588
        test_gr_a5a5 4
1589
        test_gr_a5a5 5
1590
        test_gr_a5a5 6
1591
        test_gr_a5a5 7
1592
        ; 1010 0101 1010 0101 -> 0010 1001 0110 1001  
1593
        cmp.w   #0x2969, @word_dest
1594
        beq     .Lwdisp162
1595
        fail
1596
.Lwdisp162:
1597
        mov.w   #0xa5a5, @word_dest
1598
 
1599
shlr_w_disp32_2:
1600
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1601
        set_ccr_zero
1602
 
1603
        mov     #word_dest-666, er0
1604
        shlr.w  #2, @(666:32, er0)      ; shift right logical by two, disp32
1605
;;;     .word   0x7884
1606
;;;     .word   0x6b28
1607
;;;     .long   666
1608
;;;     .word   0x1150
1609
 
1610
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1611
        test_zero_clear
1612
        test_ovf_clear
1613
        test_neg_clear
1614
 
1615
        test_h_gr32 word_dest-666 er0
1616
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1617
        test_gr_a5a5 2
1618
        test_gr_a5a5 3
1619
        test_gr_a5a5 4
1620
        test_gr_a5a5 5
1621
        test_gr_a5a5 6
1622
        test_gr_a5a5 7
1623
        ; 1010 0101 1010 0101 -> 0010 1001 0110 1001  
1624
        cmp.w   #0x2969, @word_dest
1625
        beq     .Lwdisp322
1626
        fail
1627
.Lwdisp322:
1628
        mov.w   #0xa5a5, @word_dest
1629
 
1630
shlr_w_abs16_2:
1631
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1632
        set_ccr_zero
1633
 
1634
        shlr.w  #2, @word_dest:16       ; shift right logical by two, abs16
1635
;;;     .word   0x6b18
1636
;;;     .word   word_dest
1637
;;;     .word   0x1150
1638
 
1639
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1640
        test_zero_clear
1641
        test_ovf_clear
1642
        test_neg_clear
1643
 
1644
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
1645
        test_gr_a5a5 2
1646
        test_gr_a5a5 2
1647
        test_gr_a5a5 3
1648
        test_gr_a5a5 4
1649
        test_gr_a5a5 5
1650
        test_gr_a5a5 6
1651
        test_gr_a5a5 7
1652
        ; 1010 0101 1010 0101 -> 0010 1001 0110 1001  
1653
        cmp.w   #0x2969, @word_dest
1654
        beq     .Lwabs162
1655
        fail
1656
.Lwabs162:
1657
        mov.w   #0xa5a5, @word_dest
1658
 
1659
shlr_w_abs32_2:
1660
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1661
        set_ccr_zero
1662
 
1663
        shlr.w  #2, @word_dest:32       ; shift right logical by two, abs32
1664
;;;     .word   0x6b38
1665
;;;     .long   word_dest
1666
;;;     .word   0x1150
1667
 
1668
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1669
        test_zero_clear
1670
        test_ovf_clear
1671
        test_neg_clear
1672
 
1673
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
1674
        test_gr_a5a5 2
1675
        test_gr_a5a5 2
1676
        test_gr_a5a5 3
1677
        test_gr_a5a5 4
1678
        test_gr_a5a5 5
1679
        test_gr_a5a5 6
1680
        test_gr_a5a5 7
1681
        ; 1010 0101 1010 0101 -> 0010 1001 0110 1001  
1682
        cmp.w   #0x2969, @word_dest
1683
        beq     .Lwabs322
1684
        fail
1685
.Lwabs322:
1686
        mov.w   #0xa5a5, @word_dest
1687
 
1688
shlr_w_reg16_4:
1689
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1690
        set_ccr_zero
1691
 
1692
        shlr.w  #4, r0          ; shift right logical by four
1693
;;;     .word   0x1120
1694
 
1695
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
1696
        test_zero_clear
1697
        test_ovf_clear
1698
        test_neg_clear
1699
 
1700
        test_h_gr16 0x0a5a r0   ; 1010 0101 1010 0101 -> 0000 1010 0101 1010 
1701
        test_h_gr32 0xa5a50a5a er0
1702
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1703
        test_gr_a5a5 2
1704
        test_gr_a5a5 3
1705
        test_gr_a5a5 4
1706
        test_gr_a5a5 5
1707
        test_gr_a5a5 6
1708
        test_gr_a5a5 7
1709
 
1710
shlr_w_reg16_reg8:
1711
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1712
        set_ccr_zero
1713
 
1714
        mov     #5, r1l
1715
        shlr.w  r1l, r0         ; shift right logical by register value
1716
 
1717
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
1718
        test_zero_clear
1719
        test_ovf_clear
1720
        test_neg_clear
1721
 
1722
        test_h_gr16  0x052d r0  ; 1010 0101 1010 0101 -> 0000 0101 0010 1101
1723
        test_h_gr32  0xa5a5052d er0
1724
        test_h_gr32  0xa5a5a505 er1
1725
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
1726
        test_gr_a5a5 3
1727
        test_gr_a5a5 4
1728
        test_gr_a5a5 5
1729
        test_gr_a5a5 6
1730
        test_gr_a5a5 7
1731
 
1732
shlr_w_ind_4:
1733
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1734
        set_ccr_zero
1735
 
1736
        mov     #word_dest, er0
1737
        shlr.w  #4, @er0        ; shift right logical by four, indirect
1738
;;;     .word   0x7d80
1739
;;;     .word   0x1120
1740
 
1741
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1742
        test_zero_clear
1743
        test_ovf_clear
1744
        test_neg_clear
1745
 
1746
        test_h_gr32 word_dest er0
1747
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1748
        test_gr_a5a5 2
1749
        test_gr_a5a5 3
1750
        test_gr_a5a5 4
1751
        test_gr_a5a5 5
1752
        test_gr_a5a5 6
1753
        test_gr_a5a5 7
1754
        ; 1010 0101 1010 0101 -> 0000 1010 0101 1010 
1755
        cmp.w   #0x0a5a, @word_dest
1756
        beq     .Lwind4
1757
        fail
1758
.Lwind4:
1759
        mov.w   #0xa5a5, @word_dest
1760
 
1761
shlr_w_postinc_4:
1762
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1763
        set_ccr_zero
1764
 
1765
        mov     #word_dest, er0
1766
        shlr.w  #4, @er0+       ; shift right logical by four, postinc
1767
;;;     .word   0x0154
1768
;;;     .word   0x6d08
1769
;;;     .word   0x1120
1770
 
1771
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1772
        test_zero_clear
1773
        test_ovf_clear
1774
        test_neg_clear
1775
 
1776
        test_h_gr32 word_dest+2 er0
1777
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1778
        test_gr_a5a5 2
1779
        test_gr_a5a5 3
1780
        test_gr_a5a5 4
1781
        test_gr_a5a5 5
1782
        test_gr_a5a5 6
1783
        test_gr_a5a5 7
1784
        ; 1010 0101 1010 0101 -> 0000 1010 0101 1010 
1785
        cmp.w   #0x0a5a, @word_dest
1786
        beq     .Lwpostinc4
1787
        fail
1788
.Lwpostinc4:
1789
        mov.w   #0xa5a5, @word_dest
1790
 
1791
shlr_w_postdec_4:
1792
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1793
        set_ccr_zero
1794
 
1795
        mov     #word_dest, er0
1796
        shlr.w  #4, @er0-       ; shift right logical by four, postdec
1797
;;;     .word   0x0156
1798
;;;     .word   0x6d08
1799
;;;     .word   0x1120
1800
 
1801
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1802
        test_zero_clear
1803
        test_ovf_clear
1804
        test_neg_clear
1805
 
1806
        test_h_gr32 word_dest-2 er0
1807
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1808
        test_gr_a5a5 2
1809
        test_gr_a5a5 3
1810
        test_gr_a5a5 4
1811
        test_gr_a5a5 5
1812
        test_gr_a5a5 6
1813
        test_gr_a5a5 7
1814
        ; 1010 0101 1010 0101 -> 0000 1010 0101 1010 
1815
        cmp.w   #0x0a5a, @word_dest
1816
        beq     .Lwpostdec4
1817
        fail
1818
.Lwpostdec4:
1819
        mov.w   #0xa5a5, @word_dest
1820
 
1821
shlr_w_preinc_4:
1822
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1823
        set_ccr_zero
1824
 
1825
        mov     #word_dest-2, er0
1826
        shlr.w  #4, @+er0       ; shift right logical by four, preinc
1827
;;;     .word   0x0155
1828
;;;     .word   0x6d08
1829
;;;     .word   0x1120
1830
 
1831
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1832
        test_zero_clear
1833
        test_ovf_clear
1834
        test_neg_clear
1835
 
1836
        test_h_gr32 word_dest er0
1837
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1838
        test_gr_a5a5 2
1839
        test_gr_a5a5 3
1840
        test_gr_a5a5 4
1841
        test_gr_a5a5 5
1842
        test_gr_a5a5 6
1843
        test_gr_a5a5 7
1844
        ; 1010 0101 1010 0101 -> 0000 1010 0101 1010 
1845
        cmp.w   #0x0a5a, @word_dest
1846
        beq     .Lwpreinc4
1847
        fail
1848
.Lwpreinc4:
1849
        mov.w   #0xa5a5, @word_dest
1850
 
1851
shlr_w_predec_4:
1852
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1853
        set_ccr_zero
1854
 
1855
        mov     #word_dest+2, er0
1856
        shlr.w  #4, @-er0       ; shift right logical by four, predec
1857
;;;     .word   0x0157
1858
;;;     .word   0x6d08
1859
;;;     .word   0x1120
1860
 
1861
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1862
        test_zero_clear
1863
        test_ovf_clear
1864
        test_neg_clear
1865
 
1866
        test_h_gr32 word_dest er0
1867
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1868
        test_gr_a5a5 2
1869
        test_gr_a5a5 3
1870
        test_gr_a5a5 4
1871
        test_gr_a5a5 5
1872
        test_gr_a5a5 6
1873
        test_gr_a5a5 7
1874
        ; 1010 0101 1010 0101 -> 0000 1010 0101 1010 
1875
        cmp.w   #0x0a5a, @word_dest
1876
        beq     .Lwpredec4
1877
        fail
1878
.Lwpredec4:
1879
        mov.w   #0xa5a5, @word_dest
1880
 
1881
shlr_w_disp2_4:
1882
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1883
        set_ccr_zero
1884
 
1885
        mov     #word_dest-4, er0
1886
        shlr.w  #4, @(4:2, er0) ; shift right logical by four, disp2
1887
;;;     .word   0x0156
1888
;;;     .word   0x6908
1889
;;;     .word   0x1120
1890
 
1891
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1892
        test_zero_clear
1893
        test_ovf_clear
1894
        test_neg_clear
1895
 
1896
        test_h_gr32 word_dest-4 er0
1897
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1898
        test_gr_a5a5 2
1899
        test_gr_a5a5 3
1900
        test_gr_a5a5 4
1901
        test_gr_a5a5 5
1902
        test_gr_a5a5 6
1903
        test_gr_a5a5 7
1904
        ; 1010 0101 1010 0101 -> 0000 1010 0101 1010 
1905
        cmp.w   #0x0a5a, @word_dest
1906
        beq     .Lwdisp24
1907
        fail
1908
.Lwdisp24:
1909
        mov.w   #0xa5a5, @word_dest
1910
 
1911
shlr_w_disp16_4:
1912
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1913
        set_ccr_zero
1914
 
1915
        mov     #word_dest-44, er0
1916
        shlr.w  #4, @(44:16, er0)       ; shift right logical by four, disp16
1917
;;;     .word   0x0154
1918
;;;     .word   0x6f08
1919
;;;     .word   44
1920
;;;     .word   0x1120
1921
 
1922
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1923
        test_zero_clear
1924
        test_ovf_clear
1925
        test_neg_clear
1926
 
1927
        test_h_gr32 word_dest-44 er0
1928
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1929
        test_gr_a5a5 2
1930
        test_gr_a5a5 3
1931
        test_gr_a5a5 4
1932
        test_gr_a5a5 5
1933
        test_gr_a5a5 6
1934
        test_gr_a5a5 7
1935
        ; 1010 0101 1010 0101 -> 0000 1010 0101 1010 
1936
        cmp.w   #0x0a5a, @word_dest
1937
        beq     .Lwdisp164
1938
        fail
1939
.Lwdisp164:
1940
        mov.w   #0xa5a5, @word_dest
1941
 
1942
shlr_w_disp32_4:
1943
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1944
        set_ccr_zero
1945
 
1946
        mov     #word_dest-666, er0
1947
        shlr.w  #4, @(666:32, er0)      ; shift right logical by four, disp32
1948
;;;     .word   0x7884
1949
;;;     .word   0x6b28
1950
;;;     .long   666
1951
;;;     .word   0x1120
1952
 
1953
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1954
        test_zero_clear
1955
        test_ovf_clear
1956
        test_neg_clear
1957
 
1958
        test_h_gr32 word_dest-666 er0
1959
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
1960
        test_gr_a5a5 2
1961
        test_gr_a5a5 3
1962
        test_gr_a5a5 4
1963
        test_gr_a5a5 5
1964
        test_gr_a5a5 6
1965
        test_gr_a5a5 7
1966
        ; 1010 0101 1010 0101 -> 0000 1010 0101 1010 
1967
        cmp.w   #0x0a5a, @word_dest
1968
        beq     .Lwdisp324
1969
        fail
1970
.Lwdisp324:
1971
        mov.w   #0xa5a5, @word_dest
1972
 
1973
shlr_w_abs16_4:
1974
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
1975
        set_ccr_zero
1976
 
1977
        shlr.w  #4, @word_dest:16       ; shift right logical by four, abs16
1978
;;;     .word   0x6b18
1979
;;;     .word   word_dest
1980
;;;     .word   0x1120
1981
 
1982
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
1983
        test_zero_clear
1984
        test_ovf_clear
1985
        test_neg_clear
1986
 
1987
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
1988
        test_gr_a5a5 2
1989
        test_gr_a5a5 2
1990
        test_gr_a5a5 3
1991
        test_gr_a5a5 4
1992
        test_gr_a5a5 5
1993
        test_gr_a5a5 6
1994
        test_gr_a5a5 7
1995
        ; 1010 0101 1010 0101 -> 0000 1010 0101 1010 
1996
        cmp.w   #0x0a5a, @word_dest
1997
        beq     .Lwabs164
1998
        fail
1999
.Lwabs164:
2000
        mov.w   #0xa5a5, @word_dest
2001
 
2002
shlr_w_abs32_4:
2003
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2004
        set_ccr_zero
2005
 
2006
        shlr.w  #4, @word_dest:32       ; shift right logical by four, abs32
2007
;;;     .word   0x6b38
2008
;;;     .long   word_dest
2009
;;;     .word   0x1120
2010
 
2011
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
2012
        test_zero_clear
2013
        test_ovf_clear
2014
        test_neg_clear
2015
 
2016
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
2017
        test_gr_a5a5 2
2018
        test_gr_a5a5 2
2019
        test_gr_a5a5 3
2020
        test_gr_a5a5 4
2021
        test_gr_a5a5 5
2022
        test_gr_a5a5 6
2023
        test_gr_a5a5 7
2024
        ; 1010 0101 1010 0101 -> 0000 1010 0101 1010 
2025
        cmp.w   #0x0a5a, @word_dest
2026
        beq     .Lwabs324
2027
        fail
2028
.Lwabs324:
2029
        mov.w   #0xa5a5, @word_dest
2030
 
2031
shlr_w_reg16_8:
2032
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2033
        set_ccr_zero
2034
 
2035
        shlr.w  #8, r0          ; shift right logical by eight
2036
;;;     .word   0x1160
2037
 
2038
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2039
        test_zero_clear
2040
        test_ovf_clear
2041
        test_neg_clear
2042
 
2043
        test_h_gr16 0x00a5 r0   ; 1010 0101 1010 0101 -> 0000 0000 1010 0101 
2044
        test_h_gr32 0xa5a500a5 er0
2045
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2046
        test_gr_a5a5 2
2047
        test_gr_a5a5 3
2048
        test_gr_a5a5 4
2049
        test_gr_a5a5 5
2050
        test_gr_a5a5 6
2051
        test_gr_a5a5 7
2052
 
2053
shlr_w_ind_8:
2054
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2055
        set_ccr_zero
2056
 
2057
        mov     #word_dest, er0
2058
        shlr.w  #8, @er0        ; shift right logical by eight, indirect
2059
;;;     .word   0x7d80
2060
;;;     .word   0x1160
2061
 
2062
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2063
        test_zero_clear
2064
        test_ovf_clear
2065
        test_neg_clear
2066
 
2067
        test_h_gr32 word_dest er0
2068
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2069
        test_gr_a5a5 2
2070
        test_gr_a5a5 3
2071
        test_gr_a5a5 4
2072
        test_gr_a5a5 5
2073
        test_gr_a5a5 6
2074
        test_gr_a5a5 7
2075
        ; 1010 0101 1010 0101 -> 0000 0000 1010 0101 
2076
        cmp.w   #0x00a5, @word_dest
2077
        beq     .Lwind8
2078
        fail
2079
.Lwind8:
2080
        mov.w   #0xa5a5, @word_dest
2081
 
2082
shlr_w_postinc_8:
2083
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2084
        set_ccr_zero
2085
 
2086
        mov     #word_dest, er0
2087
        shlr.w  #8, @er0+       ; shift right logical by eight, postinc
2088
;;;     .word   0x0154
2089
;;;     .word   0x6d08
2090
;;;     .word   0x1160
2091
 
2092
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2093
        test_zero_clear
2094
        test_ovf_clear
2095
        test_neg_clear
2096
 
2097
        test_h_gr32 word_dest+2 er0
2098
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2099
        test_gr_a5a5 2
2100
        test_gr_a5a5 3
2101
        test_gr_a5a5 4
2102
        test_gr_a5a5 5
2103
        test_gr_a5a5 6
2104
        test_gr_a5a5 7
2105
        ; 1010 0101 1010 0101 -> 0000 0000 1010 0101 
2106
        cmp.w   #0x00a5, @word_dest
2107
        beq     .Lwpostinc8
2108
        fail
2109
.Lwpostinc8:
2110
        mov.w   #0xa5a5, @word_dest
2111
 
2112
shlr_w_postdec_8:
2113
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2114
        set_ccr_zero
2115
 
2116
        mov     #word_dest, er0
2117
        shlr.w  #8, @er0-       ; shift right logical by eight, postdec
2118
;;;     .word   0x0156
2119
;;;     .word   0x6d08
2120
;;;     .word   0x1160
2121
 
2122
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2123
        test_zero_clear
2124
        test_ovf_clear
2125
        test_neg_clear
2126
 
2127
        test_h_gr32 word_dest-2 er0
2128
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2129
        test_gr_a5a5 2
2130
        test_gr_a5a5 3
2131
        test_gr_a5a5 4
2132
        test_gr_a5a5 5
2133
        test_gr_a5a5 6
2134
        test_gr_a5a5 7
2135
        ; 1010 0101 1010 0101 -> 0000 0000 1010 0101 
2136
        cmp.w   #0x00a5, @word_dest
2137
        beq     .Lwpostdec8
2138
        fail
2139
.Lwpostdec8:
2140
        mov.w   #0xa5a5, @word_dest
2141
 
2142
shlr_w_preinc_8:
2143
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2144
        set_ccr_zero
2145
 
2146
        mov     #word_dest-2, er0
2147
        shlr.w  #8, @+er0       ; shift right logical by eight, preinc
2148
;;;     .word   0x0155
2149
;;;     .word   0x6d08
2150
;;;     .word   0x1160
2151
 
2152
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2153
        test_zero_clear
2154
        test_ovf_clear
2155
        test_neg_clear
2156
 
2157
        test_h_gr32 word_dest er0
2158
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2159
        test_gr_a5a5 2
2160
        test_gr_a5a5 3
2161
        test_gr_a5a5 4
2162
        test_gr_a5a5 5
2163
        test_gr_a5a5 6
2164
        test_gr_a5a5 7
2165
        ; 1010 0101 1010 0101 -> 0000 0000 1010 0101 
2166
        cmp.w   #0x00a5, @word_dest
2167
        beq     .Lwpreinc8
2168
        fail
2169
.Lwpreinc8:
2170
        mov.w   #0xa5a5, @word_dest
2171
 
2172
shlr_w_predec_8:
2173
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2174
        set_ccr_zero
2175
 
2176
        mov     #word_dest+2, er0
2177
        shlr.w  #8, @-er0       ; shift right logical by eight, predec
2178
;;;     .word   0x0157
2179
;;;     .word   0x6d08
2180
;;;     .word   0x1160
2181
 
2182
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2183
        test_zero_clear
2184
        test_ovf_clear
2185
        test_neg_clear
2186
 
2187
        test_h_gr32 word_dest er0
2188
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2189
        test_gr_a5a5 2
2190
        test_gr_a5a5 3
2191
        test_gr_a5a5 4
2192
        test_gr_a5a5 5
2193
        test_gr_a5a5 6
2194
        test_gr_a5a5 7
2195
        ; 1010 0101 1010 0101 -> 0000 0000 1010 0101 
2196
        cmp.w   #0x00a5, @word_dest
2197
        beq     .Lwpredec8
2198
        fail
2199
.Lwpredec8:
2200
        mov.w   #0xa5a5, @word_dest
2201
 
2202
shlr_w_disp2_8:
2203
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2204
        set_ccr_zero
2205
 
2206
        mov     #word_dest-4, er0
2207
        shlr.w  #8, @(4:2, er0) ; shift right logical by eight, disp2
2208
;;;     .word   0x0156
2209
;;;     .word   0x6908
2210
;;;     .word   0x1160
2211
 
2212
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2213
        test_zero_clear
2214
        test_ovf_clear
2215
        test_neg_clear
2216
 
2217
        test_h_gr32 word_dest-4 er0
2218
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2219
        test_gr_a5a5 2
2220
        test_gr_a5a5 3
2221
        test_gr_a5a5 4
2222
        test_gr_a5a5 5
2223
        test_gr_a5a5 6
2224
        test_gr_a5a5 7
2225
        ; 1010 0101 1010 0101 -> 0000 0000 1010 0101 
2226
        cmp.w   #0x00a5, @word_dest
2227
        beq     .Lwdisp28
2228
        fail
2229
.Lwdisp28:
2230
        mov.w   #0xa5a5, @word_dest
2231
 
2232
shlr_w_disp16_8:
2233
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2234
        set_ccr_zero
2235
 
2236
        mov     #word_dest-44, er0
2237
        shlr.w  #8, @(44:16, er0)       ; shift right logical by eight, disp16
2238
;;;     .word   0x0154
2239
;;;     .word   0x6f08
2240
;;;     .word   44
2241
;;;     .word   0x1160
2242
 
2243
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2244
        test_zero_clear
2245
        test_ovf_clear
2246
        test_neg_clear
2247
 
2248
        test_h_gr32 word_dest-44 er0
2249
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2250
        test_gr_a5a5 2
2251
        test_gr_a5a5 3
2252
        test_gr_a5a5 4
2253
        test_gr_a5a5 5
2254
        test_gr_a5a5 6
2255
        test_gr_a5a5 7
2256
        ; 1010 0101 1010 0101 -> 0000 0000 1010 0101 
2257
        cmp.w   #0x00a5, @word_dest
2258
        beq     .Lwdisp168
2259
        fail
2260
.Lwdisp168:
2261
        mov.w   #0xa5a5, @word_dest
2262
 
2263
shlr_w_disp32_8:
2264
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2265
        set_ccr_zero
2266
 
2267
        mov     #word_dest-666, er0
2268
        shlr.w  #8, @(666:32, er0)      ; shift right logical by eight, disp32
2269
;;;     .word   0x7884
2270
;;;     .word   0x6b28
2271
;;;     .long   666
2272
;;;     .word   0x1160
2273
 
2274
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2275
        test_zero_clear
2276
        test_ovf_clear
2277
        test_neg_clear
2278
 
2279
        test_h_gr32 word_dest-666 er0
2280
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2281
        test_gr_a5a5 2
2282
        test_gr_a5a5 3
2283
        test_gr_a5a5 4
2284
        test_gr_a5a5 5
2285
        test_gr_a5a5 6
2286
        test_gr_a5a5 7
2287
        ; 1010 0101 1010 0101 -> 0000 0000 1010 0101 
2288
        cmp.w   #0x00a5, @word_dest
2289
        beq     .Lwdisp328
2290
        fail
2291
.Lwdisp328:
2292
        mov.w   #0xa5a5, @word_dest
2293
 
2294
shlr_w_abs16_8:
2295
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2296
        set_ccr_zero
2297
 
2298
        shlr.w  #8, @word_dest:16       ; shift right logical by eight, abs16
2299
;;;     .word   0x6b18
2300
;;;     .word   word_dest
2301
;;;     .word   0x1160
2302
 
2303
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2304
        test_zero_clear
2305
        test_ovf_clear
2306
        test_neg_clear
2307
 
2308
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
2309
        test_gr_a5a5 2
2310
        test_gr_a5a5 2
2311
        test_gr_a5a5 3
2312
        test_gr_a5a5 4
2313
        test_gr_a5a5 5
2314
        test_gr_a5a5 6
2315
        test_gr_a5a5 7
2316
        ; 1010 0101 1010 0101 -> 0000 0000 1010 0101 
2317
        cmp.w   #0x00a5, @word_dest
2318
        beq     .Lwabs168
2319
        fail
2320
.Lwabs168:
2321
        mov.w   #0xa5a5, @word_dest
2322
 
2323
shlr_w_abs32_8:
2324
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2325
        set_ccr_zero
2326
 
2327
        shlr.w  #8, @word_dest:32       ; shift right logical by eight, abs32
2328
;;;     .word   0x6b38
2329
;;;     .long   word_dest
2330
;;;     .word   0x1160
2331
 
2332
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2333
        test_zero_clear
2334
        test_ovf_clear
2335
        test_neg_clear
2336
 
2337
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
2338
        test_gr_a5a5 2
2339
        test_gr_a5a5 2
2340
        test_gr_a5a5 3
2341
        test_gr_a5a5 4
2342
        test_gr_a5a5 5
2343
        test_gr_a5a5 6
2344
        test_gr_a5a5 7
2345
        ; 1010 0101 1010 0101 -> 0000 0000 1010 0101 
2346
        cmp.w   #0x00a5, @word_dest
2347
        beq     .Lwabs328
2348
        fail
2349
.Lwabs328:
2350
        mov.w   #0xa5a5, @word_dest
2351
 
2352
shlr_l_imm5_1:
2353
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2354
        set_ccr_zero
2355
 
2356
        shlr.l  #31:5, er0      ; shift right logical by 5-bit immediate
2357
;;;     .word   0x0399
2358
;;;     .word   0x1130
2359
 
2360
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
2361
        test_zero_clear
2362
        test_ovf_clear
2363
        test_neg_clear
2364
 
2365
        ; 1010 0101 1010 0101 1010 0101 1010 0101 
2366
        ; -> 0000 0000 0000 0000 0000 0000 0000 0001
2367
        test_h_gr32 0x1 er0
2368
 
2369
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2370
        test_gr_a5a5 2
2371
        test_gr_a5a5 3
2372
        test_gr_a5a5 4
2373
        test_gr_a5a5 5
2374
        test_gr_a5a5 6
2375
        test_gr_a5a5 7
2376
.endif
2377
 
2378
shlr_l_reg32_1:
2379
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2380
        set_ccr_zero
2381
 
2382
        shlr.l  er0             ; shift right logical by one, register
2383
;;;     .word   0x1130
2384
 
2385
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2386
        test_zero_clear
2387
        test_ovf_clear
2388
        test_neg_clear
2389
 
2390
        ; 1010 0101 1010 0101 1010 0101 1010 0101 
2391
        ; -> 0101 0010 1101 0010 1101 0010 1101 0010
2392
        test_h_gr32 0x52d2d2d2 er0
2393
 
2394
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2395
        test_gr_a5a5 2
2396
        test_gr_a5a5 3
2397
        test_gr_a5a5 4
2398
        test_gr_a5a5 5
2399
        test_gr_a5a5 6
2400
        test_gr_a5a5 7
2401
 
2402
.if (sim_cpu == h8sx)
2403
shlr_l_ind_1:
2404
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2405
        set_ccr_zero
2406
 
2407
        mov     #long_dest, er0
2408
        shlr.l  @er0    ; shift right logical by one, indirect
2409
;;;     .word   0x0104
2410
;;;     .word   0x6908
2411
;;;     .word   0x1130
2412
 
2413
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2414
        test_zero_clear
2415
        test_ovf_clear
2416
        test_neg_clear
2417
 
2418
        test_h_gr32 long_dest er0
2419
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2420
        test_gr_a5a5 2
2421
        test_gr_a5a5 3
2422
        test_gr_a5a5 4
2423
        test_gr_a5a5 5
2424
        test_gr_a5a5 6
2425
        test_gr_a5a5 7
2426
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2427
        ;; -> 0101 0010 1101 0010 1101 0010 1101 0010
2428
        cmp.l   #0x52d2d2d2, @long_dest
2429
        beq     .Llind1
2430
        fail
2431
.Llind1:
2432
        mov     #0xa5a5a5a5, @long_dest
2433
 
2434
shlr_l_postinc_1:
2435
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2436
        set_ccr_zero
2437
 
2438
        mov     #long_dest, er0
2439
        shlr.l  @er0+   ; shift right logical by one, postinc
2440
;;;     .word   0x0104
2441
;;;     .word   0x6d08
2442
;;;     .word   0x1130
2443
 
2444
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2445
        test_zero_clear
2446
        test_ovf_clear
2447
        test_neg_clear
2448
 
2449
        test_h_gr32 long_dest+4 er0
2450
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2451
        test_gr_a5a5 2
2452
        test_gr_a5a5 3
2453
        test_gr_a5a5 4
2454
        test_gr_a5a5 5
2455
        test_gr_a5a5 6
2456
        test_gr_a5a5 7
2457
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2458
        ;; -> 0101 0010 1101 0010 1101 0010 1101 0010
2459
        cmp.l   #0x52d2d2d2, @long_dest
2460
        beq     .Llpostinc1
2461
        fail
2462
.Llpostinc1:
2463
        mov     #0xa5a5a5a5, @long_dest
2464
 
2465
shlr_l_postdec_1:
2466
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2467
        set_ccr_zero
2468
 
2469
        mov     #long_dest, er0
2470
        shlr.l  @er0-   ; shift right logical by one, postdec
2471
;;;     .word   0x0106
2472
;;;     .word   0x6d08
2473
;;;     .word   0x1130
2474
 
2475
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2476
        test_zero_clear
2477
        test_ovf_clear
2478
        test_neg_clear
2479
 
2480
        test_h_gr32 long_dest-4 er0
2481
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2482
        test_gr_a5a5 2
2483
        test_gr_a5a5 3
2484
        test_gr_a5a5 4
2485
        test_gr_a5a5 5
2486
        test_gr_a5a5 6
2487
        test_gr_a5a5 7
2488
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2489
        ;; -> 0101 0010 1101 0010 1101 0010 1101 0010
2490
        cmp.l   #0x52d2d2d2, @long_dest
2491
        beq     .Llpostdec1
2492
        fail
2493
.Llpostdec1:
2494
        mov     #0xa5a5a5a5, @long_dest
2495
 
2496
shlr_l_preinc_1:
2497
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2498
        set_ccr_zero
2499
 
2500
        mov     #long_dest-4, er0
2501
        shlr.l  @+er0   ; shift right logical by one, preinc
2502
;;;     .word   0x0105
2503
;;;     .word   0x6d08
2504
;;;     .word   0x1130
2505
 
2506
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2507
        test_zero_clear
2508
        test_ovf_clear
2509
        test_neg_clear
2510
 
2511
        test_h_gr32 long_dest er0
2512
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2513
        test_gr_a5a5 2
2514
        test_gr_a5a5 3
2515
        test_gr_a5a5 4
2516
        test_gr_a5a5 5
2517
        test_gr_a5a5 6
2518
        test_gr_a5a5 7
2519
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2520
        ;; -> 0101 0010 1101 0010 1101 0010 1101 0010
2521
        cmp.l   #0x52d2d2d2, @long_dest
2522
        beq     .Llpreinc1
2523
        fail
2524
.Llpreinc1:
2525
        mov     #0xa5a5a5a5, @long_dest
2526
 
2527
shlr_l_predec_1:
2528
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2529
        set_ccr_zero
2530
 
2531
        mov     #long_dest+4, er0
2532
        shlr.l  @-er0   ; shift right logical by one, predec
2533
;;;     .word   0x0107
2534
;;;     .word   0x6d08
2535
;;;     .word   0x1130
2536
 
2537
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2538
        test_zero_clear
2539
        test_ovf_clear
2540
        test_neg_clear
2541
 
2542
        test_h_gr32 long_dest er0
2543
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2544
        test_gr_a5a5 2
2545
        test_gr_a5a5 3
2546
        test_gr_a5a5 4
2547
        test_gr_a5a5 5
2548
        test_gr_a5a5 6
2549
        test_gr_a5a5 7
2550
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2551
        ;; -> 0101 0010 1101 0010 1101 0010 1101 0010
2552
        cmp.l   #0x52d2d2d2, @long_dest
2553
        beq     .Llpredec1
2554
        fail
2555
.Llpredec1:
2556
        mov     #0xa5a5a5a5, @long_dest
2557
 
2558
shlr_l_disp2_1:
2559
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2560
        set_ccr_zero
2561
 
2562
        mov     #long_dest-8, er0
2563
        shlr.l  @(8:2, er0)     ; shift right logical by one, disp2
2564
;;;     .word   0x0106
2565
;;;     .word   0x6908
2566
;;;     .word   0x1130
2567
 
2568
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2569
        test_zero_clear
2570
        test_ovf_clear
2571
        test_neg_clear
2572
 
2573
        test_h_gr32 long_dest-8 er0
2574
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2575
        test_gr_a5a5 2
2576
        test_gr_a5a5 3
2577
        test_gr_a5a5 4
2578
        test_gr_a5a5 5
2579
        test_gr_a5a5 6
2580
        test_gr_a5a5 7
2581
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2582
        ;; -> 0101 0010 1101 0010 1101 0010 1101 0010
2583
        cmp.l   #0x52d2d2d2, @long_dest
2584
        beq     .Lldisp21
2585
        fail
2586
.Lldisp21:
2587
        mov     #0xa5a5a5a5, @long_dest
2588
 
2589
shlr_l_disp16_1:
2590
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2591
        set_ccr_zero
2592
 
2593
        mov     #long_dest-44, er0
2594
        shlr.l  @(44:16, er0)   ; shift right logical by one, disp16
2595
;;;     .word   0x0104
2596
;;;     .word   0x6f08
2597
;;;     .word   44
2598
;;;     .word   0x1130
2599
 
2600
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2601
        test_zero_clear
2602
        test_ovf_clear
2603
        test_neg_clear
2604
 
2605
        test_h_gr32 long_dest-44 er0
2606
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2607
        test_gr_a5a5 2
2608
        test_gr_a5a5 3
2609
        test_gr_a5a5 4
2610
        test_gr_a5a5 5
2611
        test_gr_a5a5 6
2612
        test_gr_a5a5 7
2613
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2614
        ;; -> 0101 0010 1101 0010 1101 0010 1101 0010
2615
        cmp.l   #0x52d2d2d2, @long_dest
2616
        beq     .Lldisp161
2617
        fail
2618
.Lldisp161:
2619
        mov     #0xa5a5a5a5, @long_dest
2620
 
2621
shlr_l_disp32_1:
2622
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2623
        set_ccr_zero
2624
 
2625
        mov     #long_dest-666, er0
2626
        shlr.l  @(666:32, er0)  ; shift right logical by one, disp32
2627
;;;     .word   0x7884
2628
;;;     .word   0x6b28
2629
;;;     .long   666
2630
;;;     .word   0x1130
2631
 
2632
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2633
        test_zero_clear
2634
        test_ovf_clear
2635
        test_neg_clear
2636
 
2637
        test_h_gr32 long_dest-666 er0
2638
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2639
        test_gr_a5a5 2
2640
        test_gr_a5a5 3
2641
        test_gr_a5a5 4
2642
        test_gr_a5a5 5
2643
        test_gr_a5a5 6
2644
        test_gr_a5a5 7
2645
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2646
        ;; -> 0101 0010 1101 0010 1101 0010 1101 0010
2647
        cmp.l   #0x52d2d2d2, @long_dest
2648
        beq     .Lldisp321
2649
        fail
2650
.Lldisp321:
2651
        mov     #0xa5a5a5a5, @long_dest
2652
 
2653
shlr_l_abs16_1:
2654
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2655
        set_ccr_zero
2656
 
2657
        shlr.l  @long_dest:16   ; shift right logical by one, abs16
2658
;;;     .word   0x0104
2659
;;;     .word   0x6b08
2660
;;;     .word   long_dest
2661
;;;     .word   0x1130
2662
 
2663
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2664
        test_zero_clear
2665
        test_ovf_clear
2666
        test_neg_clear
2667
 
2668
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
2669
        test_gr_a5a5 1
2670
        test_gr_a5a5 2
2671
        test_gr_a5a5 3
2672
        test_gr_a5a5 4
2673
        test_gr_a5a5 5
2674
        test_gr_a5a5 6
2675
        test_gr_a5a5 7
2676
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2677
        ;; -> 0101 0010 1101 0010 1101 0010 1101 0010
2678
        cmp.l   #0x52d2d2d2, @long_dest
2679
        beq     .Llabs161
2680
        fail
2681
.Llabs161:
2682
        mov     #0xa5a5a5a5, @long_dest
2683
 
2684
shlr_l_abs32_1:
2685
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2686
        set_ccr_zero
2687
 
2688
        shlr.l  @long_dest:32   ; shift right logical by one, abs32
2689
;;;     .word   0x0104
2690
;;;     .word   0x6b28
2691
;;;     .long   long_dest
2692
;;;     .word   0x1130
2693
 
2694
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
2695
        test_zero_clear
2696
        test_ovf_clear
2697
        test_neg_clear
2698
 
2699
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
2700
        test_gr_a5a5 1
2701
        test_gr_a5a5 2
2702
        test_gr_a5a5 3
2703
        test_gr_a5a5 4
2704
        test_gr_a5a5 5
2705
        test_gr_a5a5 6
2706
        test_gr_a5a5 7
2707
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2708
        ;; -> 0101 0010 1101 0010 1101 0010 1101 0010
2709
        cmp.l   #0x52d2d2d2, @long_dest
2710
        beq     .Llabs321
2711
        fail
2712
.Llabs321:
2713
        mov     #0xa5a5a5a5, @long_dest
2714
.endif
2715
 
2716
shlr_l_reg32_2:
2717
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2718
        set_ccr_zero
2719
 
2720
        shlr.l  #2, er0         ; shift right logical by two, register
2721
;;;     .word   0x1170
2722
 
2723
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
2724
        test_zero_clear
2725
        test_ovf_clear
2726
        test_neg_clear
2727
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2728
        ; -> 0010 1001 0110 1001 0110 1001 0110 1001
2729
        test_h_gr32 0x29696969 er0
2730
 
2731
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2732
        test_gr_a5a5 2
2733
        test_gr_a5a5 3
2734
        test_gr_a5a5 4
2735
        test_gr_a5a5 5
2736
        test_gr_a5a5 6
2737
        test_gr_a5a5 7
2738
 
2739
.if (sim_cpu == h8sx)
2740
 
2741
shlr_l_ind_2:
2742
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2743
        set_ccr_zero
2744
 
2745
        mov     #long_dest, er0
2746
        shlr.l  #2, @er0        ; shift right logical by two, indirect
2747
;;;     .word   0x0104
2748
;;;     .word   0x6908
2749
;;;     .word   0x1170
2750
 
2751
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
2752
        test_zero_clear
2753
        test_ovf_clear
2754
        test_neg_clear
2755
 
2756
        test_h_gr32 long_dest er0
2757
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2758
        test_gr_a5a5 2
2759
        test_gr_a5a5 3
2760
        test_gr_a5a5 4
2761
        test_gr_a5a5 5
2762
        test_gr_a5a5 6
2763
        test_gr_a5a5 7
2764
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2765
        ;; -> 0010 1001 0110 1001 0110 1001 0110 1001
2766
        cmp.l   #0x29696969, @long_dest
2767
        beq     .Llind2
2768
        fail
2769
.Llind2:
2770
        mov     #0xa5a5a5a5, @long_dest
2771
 
2772
shlr_l_postinc_2:
2773
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2774
        set_ccr_zero
2775
 
2776
        mov     #long_dest, er0
2777
        shlr.l  #2, @er0+       ; shift right logical by two, postinc
2778
;;;     .word   0x0104
2779
;;;     .word   0x6d08
2780
;;;     .word   0x1170
2781
 
2782
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
2783
        test_zero_clear
2784
        test_ovf_clear
2785
        test_neg_clear
2786
 
2787
        test_h_gr32 long_dest+4 er0
2788
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2789
        test_gr_a5a5 2
2790
        test_gr_a5a5 3
2791
        test_gr_a5a5 4
2792
        test_gr_a5a5 5
2793
        test_gr_a5a5 6
2794
        test_gr_a5a5 7
2795
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2796
        ;; -> 0010 1001 0110 1001 0110 1001 0110 1001
2797
        cmp.l   #0x29696969, @long_dest
2798
        beq     .Llpostinc2
2799
        fail
2800
.Llpostinc2:
2801
        mov     #0xa5a5a5a5, @long_dest
2802
 
2803
shlr_l_postdec_2:
2804
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2805
        set_ccr_zero
2806
 
2807
        mov     #long_dest, er0
2808
        shlr.l  #2, @er0-       ; shift right logical by two, postdec
2809
;;;     .word   0x0106
2810
;;;     .word   0x6d08
2811
;;;     .word   0x1170
2812
 
2813
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
2814
        test_zero_clear
2815
        test_ovf_clear
2816
        test_neg_clear
2817
 
2818
        test_h_gr32 long_dest-4 er0
2819
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2820
        test_gr_a5a5 2
2821
        test_gr_a5a5 3
2822
        test_gr_a5a5 4
2823
        test_gr_a5a5 5
2824
        test_gr_a5a5 6
2825
        test_gr_a5a5 7
2826
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2827
        ;; -> 0010 1001 0110 1001 0110 1001 0110 1001
2828
        cmp.l   #0x29696969, @long_dest
2829
        beq     .Llpostdec2
2830
        fail
2831
.Llpostdec2:
2832
        mov     #0xa5a5a5a5, @long_dest
2833
 
2834
shlr_l_preinc_2:
2835
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2836
        set_ccr_zero
2837
 
2838
        mov     #long_dest-4, er0
2839
        shlr.l  #2, @+er0       ; shift right logical by two, preinc
2840
;;;     .word   0x0105
2841
;;;     .word   0x6d08
2842
;;;     .word   0x1170
2843
 
2844
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
2845
        test_zero_clear
2846
        test_ovf_clear
2847
        test_neg_clear
2848
 
2849
        test_h_gr32 long_dest er0
2850
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2851
        test_gr_a5a5 2
2852
        test_gr_a5a5 3
2853
        test_gr_a5a5 4
2854
        test_gr_a5a5 5
2855
        test_gr_a5a5 6
2856
        test_gr_a5a5 7
2857
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2858
        ;; -> 0010 1001 0110 1001 0110 1001 0110 1001
2859
        cmp.l   #0x29696969, @long_dest
2860
        beq     .Llpreinc2
2861
        fail
2862
.Llpreinc2:
2863
        mov     #0xa5a5a5a5, @long_dest
2864
 
2865
shlr_l_predec_2:
2866
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2867
        set_ccr_zero
2868
 
2869
        mov     #long_dest+4, er0
2870
        shlr.l  #2, @-er0       ; shift right logical by two, predec
2871
;;;     .word   0x0107
2872
;;;     .word   0x6d08
2873
;;;     .word   0x1170
2874
 
2875
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
2876
        test_zero_clear
2877
        test_ovf_clear
2878
        test_neg_clear
2879
 
2880
        test_h_gr32 long_dest er0
2881
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2882
        test_gr_a5a5 2
2883
        test_gr_a5a5 3
2884
        test_gr_a5a5 4
2885
        test_gr_a5a5 5
2886
        test_gr_a5a5 6
2887
        test_gr_a5a5 7
2888
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2889
        ;; -> 0010 1001 0110 1001 0110 1001 0110 1001
2890
        cmp.l   #0x29696969, @long_dest
2891
        beq     .Llpredec2
2892
        fail
2893
.Llpredec2:
2894
        mov     #0xa5a5a5a5, @long_dest
2895
 
2896
shlr_l_disp2_2:
2897
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2898
        set_ccr_zero
2899
 
2900
        mov     #long_dest-8, er0
2901
        shlr.l  #2, @(8:2, er0) ; shift right logical by two, disp2
2902
;;;     .word   0x0106
2903
;;;     .word   0x6908
2904
;;;     .word   0x1170
2905
 
2906
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
2907
        test_zero_clear
2908
        test_ovf_clear
2909
        test_neg_clear
2910
 
2911
        test_h_gr32 long_dest-8 er0
2912
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2913
        test_gr_a5a5 2
2914
        test_gr_a5a5 3
2915
        test_gr_a5a5 4
2916
        test_gr_a5a5 5
2917
        test_gr_a5a5 6
2918
        test_gr_a5a5 7
2919
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2920
        ;; -> 0010 1001 0110 1001 0110 1001 0110 1001
2921
        cmp.l   #0x29696969, @long_dest
2922
        beq     .Lldisp22
2923
        fail
2924
.Lldisp22:
2925
        mov     #0xa5a5a5a5, @long_dest
2926
 
2927
shlr_l_disp16_2:
2928
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2929
        set_ccr_zero
2930
 
2931
        mov     #long_dest-44, er0
2932
        shlr.l  #2, @(44:16, er0)       ; shift right logical by two, disp16
2933
;;;     .word   0x0104
2934
;;;     .word   0x6f08
2935
;;;     .word   44
2936
;;;     .word   0x1170
2937
 
2938
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
2939
        test_zero_clear
2940
        test_ovf_clear
2941
        test_neg_clear
2942
 
2943
        test_h_gr32 long_dest-44 er0
2944
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2945
        test_gr_a5a5 2
2946
        test_gr_a5a5 3
2947
        test_gr_a5a5 4
2948
        test_gr_a5a5 5
2949
        test_gr_a5a5 6
2950
        test_gr_a5a5 7
2951
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2952
        ;; -> 0010 1001 0110 1001 0110 1001 0110 1001
2953
        cmp.l   #0x29696969, @long_dest
2954
        beq     .Lldisp162
2955
        fail
2956
.Lldisp162:
2957
        mov     #0xa5a5a5a5, @long_dest
2958
 
2959
shlr_l_disp32_2:
2960
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2961
        set_ccr_zero
2962
 
2963
        mov     #long_dest-666, er0
2964
        shlr.l  #2, @(666:32, er0)      ; shift right logical by two, disp32
2965
;;;     .word   0x7884
2966
;;;     .word   0x6b28
2967
;;;     .long   666
2968
;;;     .word   0x1170
2969
 
2970
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
2971
        test_zero_clear
2972
        test_ovf_clear
2973
        test_neg_clear
2974
 
2975
        test_h_gr32 long_dest-666 er0
2976
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
2977
        test_gr_a5a5 2
2978
        test_gr_a5a5 3
2979
        test_gr_a5a5 4
2980
        test_gr_a5a5 5
2981
        test_gr_a5a5 6
2982
        test_gr_a5a5 7
2983
        ; 1010 0101 1010 0101 1010 0101 1010 0101
2984
        ;; -> 0010 1001 0110 1001 0110 1001 0110 1001
2985
        cmp.l   #0x29696969, @long_dest
2986
        beq     .Lldisp322
2987
        fail
2988
.Lldisp322:
2989
        mov     #0xa5a5a5a5, @long_dest
2990
 
2991
shlr_l_abs16_2:
2992
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
2993
        set_ccr_zero
2994
 
2995
        shlr.l  #2, @long_dest:16       ; shift right logical by two, abs16
2996
;;;     .word   0x0104
2997
;;;     .word   0x6b08
2998
;;;     .word   long_dest
2999
;;;     .word   0x1170
3000
 
3001
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
3002
        test_zero_clear
3003
        test_ovf_clear
3004
        test_neg_clear
3005
 
3006
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
3007
        test_gr_a5a5 1
3008
        test_gr_a5a5 2
3009
        test_gr_a5a5 3
3010
        test_gr_a5a5 4
3011
        test_gr_a5a5 5
3012
        test_gr_a5a5 6
3013
        test_gr_a5a5 7
3014
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3015
        ;; -> 0010 1001 0110 1001 0110 1001 0110 1001
3016
        cmp.l   #0x29696969, @long_dest
3017
        beq     .Llabs162
3018
        fail
3019
.Llabs162:
3020
        mov     #0xa5a5a5a5, @long_dest
3021
 
3022
shlr_l_abs32_2:
3023
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3024
        set_ccr_zero
3025
 
3026
        shlr.l  #2, @long_dest:32       ; shift right logical by two, abs32
3027
;;;     .word   0x0104
3028
;;;     .word   0x6b28
3029
;;;     .long   long_dest
3030
;;;     .word   0x1170
3031
 
3032
        test_carry_clear                ; H=0 N=0 Z=0 V=0 C=0
3033
        test_zero_clear
3034
        test_ovf_clear
3035
        test_neg_clear
3036
 
3037
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
3038
        test_gr_a5a5 1
3039
        test_gr_a5a5 2
3040
        test_gr_a5a5 3
3041
        test_gr_a5a5 4
3042
        test_gr_a5a5 5
3043
        test_gr_a5a5 6
3044
        test_gr_a5a5 7
3045
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3046
        ;; -> 0010 1001 0110 1001 0110 1001 0110 1001
3047
        cmp.l   #0x29696969, @long_dest
3048
        beq     .Llabs322
3049
        fail
3050
.Llabs322:
3051
        mov     #0xa5a5a5a5, @long_dest
3052
 
3053
shlr_l_reg32_4:
3054
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3055
        set_ccr_zero
3056
 
3057
        shlr.l  #4, er0         ; shift right logical by four, register
3058
;;;     .word   0x1138
3059
 
3060
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
3061
        test_zero_clear
3062
        test_ovf_clear
3063
        test_neg_clear
3064
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3065
        ; -> 0000 1010 0101 1010 0101 1010 0101 1010 
3066
        test_h_gr32 0x0a5a5a5a er0
3067
 
3068
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3069
        test_gr_a5a5 2
3070
        test_gr_a5a5 3
3071
        test_gr_a5a5 4
3072
        test_gr_a5a5 5
3073
        test_gr_a5a5 6
3074
        test_gr_a5a5 7
3075
 
3076
shlr_l_reg32_reg8:
3077
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3078
        set_ccr_zero
3079
 
3080
        mov     #5, r1l
3081
        shlr.l  r1l, er0        ; shift right logical by value of register
3082
 
3083
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
3084
        test_zero_clear
3085
        test_ovf_clear
3086
        test_neg_clear
3087
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3088
        ; -> 0000 0101 0010 1101 0010 1101 0010 1101
3089
        test_h_gr32  0x052d2d2d er0
3090
        test_h_gr32  0xa5a5a505 er1
3091
 
3092
        test_gr_a5a5 2          ; Make sure other general regs not disturbed
3093
        test_gr_a5a5 3
3094
        test_gr_a5a5 4
3095
        test_gr_a5a5 5
3096
        test_gr_a5a5 6
3097
        test_gr_a5a5 7
3098
 
3099
shlr_l_ind_4:
3100
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3101
        set_ccr_zero
3102
 
3103
        mov     #long_dest, er0
3104
        shlr.l  #4, @er0        ; shift right logical by four, indirect
3105
;;;     .word   0x0104
3106
;;;     .word   0x6908
3107
;;;     .word   0x1138
3108
 
3109
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
3110
        test_zero_clear
3111
        test_ovf_clear
3112
        test_neg_clear
3113
 
3114
        test_h_gr32 long_dest er0
3115
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3116
        test_gr_a5a5 2
3117
        test_gr_a5a5 3
3118
        test_gr_a5a5 4
3119
        test_gr_a5a5 5
3120
        test_gr_a5a5 6
3121
        test_gr_a5a5 7
3122
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3123
        ;; -> 0000 1010 0101 1010 0101 1010 0101 1010
3124
        cmp.l   #0x0a5a5a5a, @long_dest
3125
        beq     .Llind4
3126
        fail
3127
.Llind4:
3128
        mov     #0xa5a5a5a5, @long_dest
3129
 
3130
shlr_l_postinc_4:
3131
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3132
        set_ccr_zero
3133
 
3134
        mov     #long_dest, er0
3135
        shlr.l  #4, @er0+       ; shift right logical by four, postinc
3136
;;;     .word   0x0104
3137
;;;     .word   0x6d08
3138
;;;     .word   0x1138
3139
 
3140
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
3141
        test_zero_clear
3142
        test_ovf_clear
3143
        test_neg_clear
3144
 
3145
        test_h_gr32 long_dest+4 er0
3146
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3147
        test_gr_a5a5 2
3148
        test_gr_a5a5 3
3149
        test_gr_a5a5 4
3150
        test_gr_a5a5 5
3151
        test_gr_a5a5 6
3152
        test_gr_a5a5 7
3153
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3154
        ;; -> 0000 1010 0101 1010 0101 1010 0101 1010
3155
        cmp.l   #0x0a5a5a5a, @long_dest
3156
        beq     .Llpostinc4
3157
        fail
3158
.Llpostinc4:
3159
        mov     #0xa5a5a5a5, @long_dest
3160
 
3161
shlr_l_postdec_4:
3162
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3163
        set_ccr_zero
3164
 
3165
        mov     #long_dest, er0
3166
        shlr.l  #4, @er0-       ; shift right logical by four, postdec
3167
;;;     .word   0x0106
3168
;;;     .word   0x6d08
3169
;;;     .word   0x1138
3170
 
3171
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
3172
        test_zero_clear
3173
        test_ovf_clear
3174
        test_neg_clear
3175
 
3176
        test_h_gr32 long_dest-4 er0
3177
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3178
        test_gr_a5a5 2
3179
        test_gr_a5a5 3
3180
        test_gr_a5a5 4
3181
        test_gr_a5a5 5
3182
        test_gr_a5a5 6
3183
        test_gr_a5a5 7
3184
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3185
        ;; -> 0000 1010 0101 1010 0101 1010 0101 1010
3186
        cmp.l   #0x0a5a5a5a, @long_dest
3187
        beq     .Llpostdec4
3188
        fail
3189
.Llpostdec4:
3190
        mov     #0xa5a5a5a5, @long_dest
3191
 
3192
shlr_l_preinc_4:
3193
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3194
        set_ccr_zero
3195
 
3196
        mov     #long_dest-4, er0
3197
        shlr.l  #4, @+er0       ; shift right logical by four, preinc
3198
;;;     .word   0x0105
3199
;;;     .word   0x6d08
3200
;;;     .word   0x1138
3201
 
3202
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
3203
        test_zero_clear
3204
        test_ovf_clear
3205
        test_neg_clear
3206
 
3207
        test_h_gr32 long_dest er0
3208
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3209
        test_gr_a5a5 2
3210
        test_gr_a5a5 3
3211
        test_gr_a5a5 4
3212
        test_gr_a5a5 5
3213
        test_gr_a5a5 6
3214
        test_gr_a5a5 7
3215
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3216
        ;; -> 0000 1010 0101 1010 0101 1010 0101 1010
3217
        cmp.l   #0x0a5a5a5a, @long_dest
3218
        beq     .Llpreinc4
3219
        fail
3220
.Llpreinc4:
3221
        mov     #0xa5a5a5a5, @long_dest
3222
 
3223
shlr_l_predec_4:
3224
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3225
        set_ccr_zero
3226
 
3227
        mov     #long_dest+4, er0
3228
        shlr.l  #4, @-er0       ; shift right logical by four, predec
3229
;;;     .word   0x0107
3230
;;;     .word   0x6d08
3231
;;;     .word   0x1138
3232
 
3233
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
3234
        test_zero_clear
3235
        test_ovf_clear
3236
        test_neg_clear
3237
 
3238
        test_h_gr32 long_dest er0
3239
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3240
        test_gr_a5a5 2
3241
        test_gr_a5a5 3
3242
        test_gr_a5a5 4
3243
        test_gr_a5a5 5
3244
        test_gr_a5a5 6
3245
        test_gr_a5a5 7
3246
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3247
        ;; -> 0000 1010 0101 1010 0101 1010 0101 1010
3248
        cmp.l   #0x0a5a5a5a, @long_dest
3249
        beq     .Llpredec4
3250
        fail
3251
.Llpredec4:
3252
        mov     #0xa5a5a5a5, @long_dest
3253
 
3254
shlr_l_disp2_4:
3255
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3256
        set_ccr_zero
3257
 
3258
        mov     #long_dest-8, er0
3259
        shlr.l  #4, @(8:2, er0) ; shift right logical by four, disp2
3260
;;;     .word   0x0106
3261
;;;     .word   0x6908
3262
;;;     .word   0x1138
3263
 
3264
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
3265
        test_zero_clear
3266
        test_ovf_clear
3267
        test_neg_clear
3268
 
3269
        test_h_gr32 long_dest-8 er0
3270
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3271
        test_gr_a5a5 2
3272
        test_gr_a5a5 3
3273
        test_gr_a5a5 4
3274
        test_gr_a5a5 5
3275
        test_gr_a5a5 6
3276
        test_gr_a5a5 7
3277
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3278
        ;; -> 0000 1010 0101 1010 0101 1010 0101 1010
3279
        cmp.l   #0x0a5a5a5a, @long_dest
3280
        beq     .Lldisp24
3281
        fail
3282
.Lldisp24:
3283
        mov     #0xa5a5a5a5, @long_dest
3284
 
3285
shlr_l_disp16_4:
3286
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3287
        set_ccr_zero
3288
 
3289
        mov     #long_dest-44, er0
3290
        shlr.l  #4, @(44:16, er0)       ; shift right logical by four, disp16
3291
;;;     .word   0x0104
3292
;;;     .word   0x6f08
3293
;;;     .word   44
3294
;;;     .word   0x1138
3295
 
3296
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
3297
        test_zero_clear
3298
        test_ovf_clear
3299
        test_neg_clear
3300
 
3301
        test_h_gr32 long_dest-44 er0
3302
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3303
        test_gr_a5a5 2
3304
        test_gr_a5a5 3
3305
        test_gr_a5a5 4
3306
        test_gr_a5a5 5
3307
        test_gr_a5a5 6
3308
        test_gr_a5a5 7
3309
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3310
        ;; -> 0000 1010 0101 1010 0101 1010 0101 1010
3311
        cmp.l   #0x0a5a5a5a, @long_dest
3312
        beq     .Lldisp164
3313
        fail
3314
.Lldisp164:
3315
        mov     #0xa5a5a5a5, @long_dest
3316
 
3317
shlr_l_disp32_4:
3318
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3319
        set_ccr_zero
3320
 
3321
        mov     #long_dest-666, er0
3322
        shlr.l  #4, @(666:32, er0)      ; shift right logical by four, disp32
3323
;;;     .word   0x7884
3324
;;;     .word   0x6b28
3325
;;;     .long   666
3326
;;;     .word   0x1138
3327
 
3328
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
3329
        test_zero_clear
3330
        test_ovf_clear
3331
        test_neg_clear
3332
 
3333
        test_h_gr32 long_dest-666 er0
3334
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3335
        test_gr_a5a5 2
3336
        test_gr_a5a5 3
3337
        test_gr_a5a5 4
3338
        test_gr_a5a5 5
3339
        test_gr_a5a5 6
3340
        test_gr_a5a5 7
3341
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3342
        ;; -> 0000 1010 0101 1010 0101 1010 0101 1010
3343
        cmp.l   #0x0a5a5a5a, @long_dest
3344
        beq     .Lldisp324
3345
        fail
3346
.Lldisp324:
3347
        mov     #0xa5a5a5a5, @long_dest
3348
 
3349
shlr_l_abs16_4:
3350
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3351
        set_ccr_zero
3352
 
3353
        shlr.l  #4, @long_dest:16       ; shift right logical by four, abs16
3354
;;;     .word   0x0104
3355
;;;     .word   0x6b08
3356
;;;     .word   long_dest
3357
;;;     .word   0x1138
3358
 
3359
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
3360
        test_zero_clear
3361
        test_ovf_clear
3362
        test_neg_clear
3363
 
3364
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
3365
        test_gr_a5a5 1
3366
        test_gr_a5a5 2
3367
        test_gr_a5a5 3
3368
        test_gr_a5a5 4
3369
        test_gr_a5a5 5
3370
        test_gr_a5a5 6
3371
        test_gr_a5a5 7
3372
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3373
        ;; -> 0000 1010 0101 1010 0101 1010 0101 1010
3374
        cmp.l   #0x0a5a5a5a, @long_dest
3375
        beq     .Llabs164
3376
        fail
3377
.Llabs164:
3378
        mov     #0xa5a5a5a5, @long_dest
3379
 
3380
shlr_l_abs32_4:
3381
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3382
        set_ccr_zero
3383
 
3384
        shlr.l  #4, @long_dest:32       ; shift right logical by four, abs32
3385
;;;     .word   0x0104
3386
;;;     .word   0x6b28
3387
;;;     .long   long_dest
3388
;;;     .word   0x1138
3389
 
3390
        test_carry_clear        ; H=0 N=0 Z=0 V=0 C=0
3391
        test_zero_clear
3392
        test_ovf_clear
3393
        test_neg_clear
3394
 
3395
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
3396
        test_gr_a5a5 1
3397
        test_gr_a5a5 2
3398
        test_gr_a5a5 3
3399
        test_gr_a5a5 4
3400
        test_gr_a5a5 5
3401
        test_gr_a5a5 6
3402
        test_gr_a5a5 7
3403
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3404
        ;; -> 0000 1010 0101 1010 0101 1010 0101 1010
3405
        cmp.l   #0x0a5a5a5a, @long_dest
3406
        beq     .Llabs324
3407
        fail
3408
.Llabs324:
3409
        mov     #0xa5a5a5a5, @long_dest
3410
 
3411
shlr_l_reg32_8:
3412
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3413
        set_ccr_zero
3414
 
3415
        shlr.l  #8, er0         ; shift right logical by eight, register
3416
;;;     .word   0x1178
3417
 
3418
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3419
        test_zero_clear
3420
        test_ovf_clear
3421
        test_neg_clear
3422
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3423
        ; -> 0000 0000 1010 0101 1010 0101 1010 0101 
3424
        test_h_gr32 0x00a5a5a5 er0
3425
 
3426
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3427
        test_gr_a5a5 2
3428
        test_gr_a5a5 3
3429
        test_gr_a5a5 4
3430
        test_gr_a5a5 5
3431
        test_gr_a5a5 6
3432
        test_gr_a5a5 7
3433
 
3434
shlr_l_ind_8:
3435
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3436
        set_ccr_zero
3437
 
3438
        mov     #long_dest, er0
3439
        shlr.l  #8, @er0        ; shift right logical by eight, indirect
3440
;;;     .word   0x0104
3441
;;;     .word   0x6908
3442
;;;     .word   0x1178
3443
 
3444
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3445
        test_zero_clear
3446
        test_ovf_clear
3447
        test_neg_clear
3448
 
3449
        test_h_gr32 long_dest er0
3450
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3451
        test_gr_a5a5 2
3452
        test_gr_a5a5 3
3453
        test_gr_a5a5 4
3454
        test_gr_a5a5 5
3455
        test_gr_a5a5 6
3456
        test_gr_a5a5 7
3457
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3458
        ;; -> 0000 0000 1010 0101 1010 0101 1010 0101
3459
        cmp.l   #0x00a5a5a5, @long_dest
3460
        beq     .Llind8
3461
        fail
3462
.Llind8:
3463
        mov     #0xa5a5a5a5, @long_dest
3464
 
3465
shlr_l_postinc_8:
3466
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3467
        set_ccr_zero
3468
 
3469
        mov     #long_dest, er0
3470
        shlr.l  #8, @er0+       ; shift right logical by eight, postinc
3471
;;;     .word   0x0104
3472
;;;     .word   0x6d08
3473
;;;     .word   0x1178
3474
 
3475
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3476
        test_zero_clear
3477
        test_ovf_clear
3478
        test_neg_clear
3479
 
3480
        test_h_gr32 long_dest+4 er0
3481
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3482
        test_gr_a5a5 2
3483
        test_gr_a5a5 3
3484
        test_gr_a5a5 4
3485
        test_gr_a5a5 5
3486
        test_gr_a5a5 6
3487
        test_gr_a5a5 7
3488
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3489
        ;; -> 0000 0000 1010 0101 1010 0101 1010 0101
3490
        cmp.l   #0x00a5a5a5, @long_dest
3491
        beq     .Llpostinc8
3492
        fail
3493
.Llpostinc8:
3494
        mov     #0xa5a5a5a5, @long_dest
3495
 
3496
shlr_l_postdec_8:
3497
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3498
        set_ccr_zero
3499
 
3500
        mov     #long_dest, er0
3501
        shlr.l  #8, @er0-       ; shift right logical by eight, postdec
3502
;;;     .word   0x0106
3503
;;;     .word   0x6d08
3504
;;;     .word   0x1178
3505
 
3506
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3507
        test_zero_clear
3508
        test_ovf_clear
3509
        test_neg_clear
3510
 
3511
        test_h_gr32 long_dest-4 er0
3512
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3513
        test_gr_a5a5 2
3514
        test_gr_a5a5 3
3515
        test_gr_a5a5 4
3516
        test_gr_a5a5 5
3517
        test_gr_a5a5 6
3518
        test_gr_a5a5 7
3519
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3520
        ;; -> 0000 0000 1010 0101 1010 0101 1010 0101
3521
        cmp.l   #0x00a5a5a5, @long_dest
3522
        beq     .Llpostdec8
3523
        fail
3524
.Llpostdec8:
3525
        mov     #0xa5a5a5a5, @long_dest
3526
 
3527
shlr_l_preinc_8:
3528
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3529
        set_ccr_zero
3530
 
3531
        mov     #long_dest-4, er0
3532
        shlr.l  #8, @+er0       ; shift right logical by eight, preinc
3533
;;;     .word   0x0105
3534
;;;     .word   0x6d08
3535
;;;     .word   0x1178
3536
 
3537
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3538
        test_zero_clear
3539
        test_ovf_clear
3540
        test_neg_clear
3541
 
3542
        test_h_gr32 long_dest er0
3543
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3544
        test_gr_a5a5 2
3545
        test_gr_a5a5 3
3546
        test_gr_a5a5 4
3547
        test_gr_a5a5 5
3548
        test_gr_a5a5 6
3549
        test_gr_a5a5 7
3550
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3551
        ;; -> 0000 0000 1010 0101 1010 0101 1010 0101
3552
        cmp.l   #0x00a5a5a5, @long_dest
3553
        beq     .Llpreinc8
3554
        fail
3555
.Llpreinc8:
3556
        mov     #0xa5a5a5a5, @long_dest
3557
 
3558
shlr_l_predec_8:
3559
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3560
        set_ccr_zero
3561
 
3562
        mov     #long_dest+4, er0
3563
        shlr.l  #8, @-er0       ; shift right logical by eight, predec
3564
;;;     .word   0x0107
3565
;;;     .word   0x6d08
3566
;;;     .word   0x1178
3567
 
3568
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3569
        test_zero_clear
3570
        test_ovf_clear
3571
        test_neg_clear
3572
 
3573
        test_h_gr32 long_dest er0
3574
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3575
        test_gr_a5a5 2
3576
        test_gr_a5a5 3
3577
        test_gr_a5a5 4
3578
        test_gr_a5a5 5
3579
        test_gr_a5a5 6
3580
        test_gr_a5a5 7
3581
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3582
        ;; -> 0000 0000 1010 0101 1010 0101 1010 0101
3583
        cmp.l   #0x00a5a5a5, @long_dest
3584
        beq     .Llpredec8
3585
        fail
3586
.Llpredec8:
3587
        mov     #0xa5a5a5a5, @long_dest
3588
 
3589
shlr_l_disp2_8:
3590
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3591
        set_ccr_zero
3592
 
3593
        mov     #long_dest-8, er0
3594
        shlr.l  #8, @(8:2, er0) ; shift right logical by eight, disp2
3595
;;;     .word   0x0106
3596
;;;     .word   0x6908
3597
;;;     .word   0x1178
3598
 
3599
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3600
        test_zero_clear
3601
        test_ovf_clear
3602
        test_neg_clear
3603
 
3604
        test_h_gr32 long_dest-8 er0
3605
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3606
        test_gr_a5a5 2
3607
        test_gr_a5a5 3
3608
        test_gr_a5a5 4
3609
        test_gr_a5a5 5
3610
        test_gr_a5a5 6
3611
        test_gr_a5a5 7
3612
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3613
        ;; -> 0000 0000 1010 0101 1010 0101 1010 0101
3614
        cmp.l   #0x00a5a5a5, @long_dest
3615
        beq     .Lldisp28
3616
        fail
3617
.Lldisp28:
3618
        mov     #0xa5a5a5a5, @long_dest
3619
 
3620
shlr_l_disp16_8:
3621
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3622
        set_ccr_zero
3623
 
3624
        mov     #long_dest-44, er0
3625
        shlr.l  #8, @(44:16, er0)       ; shift right logical by eight, disp16
3626
;;;     .word   0x0104
3627
;;;     .word   0x6f08
3628
;;;     .word   44
3629
;;;     .word   0x1178
3630
 
3631
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3632
        test_zero_clear
3633
        test_ovf_clear
3634
        test_neg_clear
3635
 
3636
        test_h_gr32 long_dest-44 er0
3637
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3638
        test_gr_a5a5 2
3639
        test_gr_a5a5 3
3640
        test_gr_a5a5 4
3641
        test_gr_a5a5 5
3642
        test_gr_a5a5 6
3643
        test_gr_a5a5 7
3644
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3645
        ;; -> 0000 0000 1010 0101 1010 0101 1010 0101
3646
        cmp.l   #0x00a5a5a5, @long_dest
3647
        beq     .Lldisp168
3648
        fail
3649
.Lldisp168:
3650
        mov     #0xa5a5a5a5, @long_dest
3651
 
3652
shlr_l_disp32_8:
3653
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3654
        set_ccr_zero
3655
 
3656
        mov     #long_dest-666, er0
3657
        shlr.l  #8, @(666:32, er0)      ; shift right logical by eight, disp32
3658
;;;     .word   0x7884
3659
;;;     .word   0x6b28
3660
;;;     .long   666
3661
;;;     .word   0x1178
3662
 
3663
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3664
        test_zero_clear
3665
        test_ovf_clear
3666
        test_neg_clear
3667
 
3668
        test_h_gr32 long_dest-666 er0
3669
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3670
        test_gr_a5a5 2
3671
        test_gr_a5a5 3
3672
        test_gr_a5a5 4
3673
        test_gr_a5a5 5
3674
        test_gr_a5a5 6
3675
        test_gr_a5a5 7
3676
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3677
        ;; -> 0000 0000 1010 0101 1010 0101 1010 0101
3678
        cmp.l   #0x00a5a5a5, @long_dest
3679
        beq     .Lldisp328
3680
        fail
3681
.Lldisp328:
3682
        mov     #0xa5a5a5a5, @long_dest
3683
 
3684
shlr_l_abs16_8:
3685
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3686
        set_ccr_zero
3687
 
3688
        shlr.l  #8, @long_dest:16       ; shift right logical by eight, abs16
3689
;;;     .word   0x0104
3690
;;;     .word   0x6b08
3691
;;;     .word   long_dest
3692
;;;     .word   0x1178
3693
 
3694
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3695
        test_zero_clear
3696
        test_ovf_clear
3697
        test_neg_clear
3698
 
3699
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
3700
        test_gr_a5a5 1
3701
        test_gr_a5a5 2
3702
        test_gr_a5a5 3
3703
        test_gr_a5a5 4
3704
        test_gr_a5a5 5
3705
        test_gr_a5a5 6
3706
        test_gr_a5a5 7
3707
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3708
        ;; -> 0000 0000 1010 0101 1010 0101 1010 0101
3709
        cmp.l   #0x00a5a5a5, @long_dest
3710
        beq     .Llabs168
3711
        fail
3712
.Llabs168:
3713
        mov     #0xa5a5a5a5, @long_dest
3714
 
3715
shlr_l_abs32_8:
3716
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3717
        set_ccr_zero
3718
 
3719
        shlr.l  #8, @long_dest:32       ; shift right logical by eight, abs32
3720
;;;     .word   0x0104
3721
;;;     .word   0x6b28
3722
;;;     .long   long_dest
3723
;;;     .word   0x1178
3724
 
3725
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3726
        test_zero_clear
3727
        test_ovf_clear
3728
        test_neg_clear
3729
 
3730
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
3731
        test_gr_a5a5 1
3732
        test_gr_a5a5 2
3733
        test_gr_a5a5 3
3734
        test_gr_a5a5 4
3735
        test_gr_a5a5 5
3736
        test_gr_a5a5 6
3737
        test_gr_a5a5 7
3738
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3739
        ;; -> 0000 0000 1010 0101 1010 0101 1010 0101
3740
        cmp.l   #0x00a5a5a5, @long_dest
3741
        beq     .Llabs328
3742
        fail
3743
.Llabs328:
3744
        mov     #0xa5a5a5a5, @long_dest
3745
 
3746
shlr_l_reg32_16:
3747
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3748
        set_ccr_zero
3749
 
3750
        shlr.l  #16, er0        ; shift right logical by sixteen, register
3751
;;;     .word   0x11f8
3752
 
3753
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3754
        test_zero_clear
3755
        test_ovf_clear
3756
        test_neg_clear
3757
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3758
        ;; -> 0000 0000 0000 0000 1010 0101 1010 0101
3759
        test_h_gr32 0x0000a5a5 er0
3760
 
3761
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3762
        test_gr_a5a5 2
3763
        test_gr_a5a5 3
3764
        test_gr_a5a5 4
3765
        test_gr_a5a5 5
3766
        test_gr_a5a5 6
3767
        test_gr_a5a5 7
3768
 
3769
shlr_l_ind_16:
3770
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3771
        set_ccr_zero
3772
 
3773
        mov     #long_dest, er0
3774
        shlr.l  #16, @er0       ; shift right logical by sixteen, indirect
3775
;;;     .word   0x0104
3776
;;;     .word   0x6908
3777
;;;     .word   0x11f8
3778
 
3779
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3780
        test_zero_clear
3781
        test_ovf_clear
3782
        test_neg_clear
3783
 
3784
        test_h_gr32 long_dest er0
3785
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3786
        test_gr_a5a5 2
3787
        test_gr_a5a5 3
3788
        test_gr_a5a5 4
3789
        test_gr_a5a5 5
3790
        test_gr_a5a5 6
3791
        test_gr_a5a5 7
3792
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3793
        ;; -> 0000 0000 0000 0000 1010 0101 1010 0101
3794
        cmp.l   #0x0000a5a5, @long_dest
3795
        beq     .Llind16
3796
        fail
3797
.Llind16:
3798
        mov     #0xa5a5a5a5, @long_dest
3799
 
3800
shlr_l_postinc_16:
3801
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3802
        set_ccr_zero
3803
 
3804
        mov     #long_dest, er0
3805
        shlr.l  #16, @er0+      ; shift right logical by sixteen, postinc
3806
;;;     .word   0x0104
3807
;;;     .word   0x6d08
3808
;;;     .word   0x11f8
3809
 
3810
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3811
        test_zero_clear
3812
        test_ovf_clear
3813
        test_neg_clear
3814
 
3815
        test_h_gr32 long_dest+4 er0
3816
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3817
        test_gr_a5a5 2
3818
        test_gr_a5a5 3
3819
        test_gr_a5a5 4
3820
        test_gr_a5a5 5
3821
        test_gr_a5a5 6
3822
        test_gr_a5a5 7
3823
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3824
        ;; -> 0000 0000 0000 0000 1010 0101 1010 0101
3825
        cmp.l   #0x0000a5a5, @long_dest
3826
        beq     .Llpostinc16
3827
        fail
3828
.Llpostinc16:
3829
        mov     #0xa5a5a5a5, @long_dest
3830
 
3831
shlr_l_postdec_16:
3832
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3833
        set_ccr_zero
3834
 
3835
        mov     #long_dest, er0
3836
        shlr.l  #16, @er0-      ; shift right logical by sixteen, postdec
3837
;;;     .word   0x0106
3838
;;;     .word   0x6d08
3839
;;;     .word   0x11f8
3840
 
3841
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3842
        test_zero_clear
3843
        test_ovf_clear
3844
        test_neg_clear
3845
 
3846
        test_h_gr32 long_dest-4 er0
3847
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3848
        test_gr_a5a5 2
3849
        test_gr_a5a5 3
3850
        test_gr_a5a5 4
3851
        test_gr_a5a5 5
3852
        test_gr_a5a5 6
3853
        test_gr_a5a5 7
3854
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3855
        ;; -> 0000 0000 0000 0000 1010 0101 1010 0101
3856
        cmp.l   #0x0000a5a5, @long_dest
3857
        beq     .Llpostdec16
3858
        fail
3859
.Llpostdec16:
3860
        mov     #0xa5a5a5a5, @long_dest
3861
 
3862
shlr_l_preinc_16:
3863
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3864
        set_ccr_zero
3865
 
3866
        mov     #long_dest-4, er0
3867
        shlr.l  #16, @+er0      ; shift right logical by sixteen, preinc
3868
;;;     .word   0x0105
3869
;;;     .word   0x6d08
3870
;;;     .word   0x11f8
3871
 
3872
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3873
        test_zero_clear
3874
        test_ovf_clear
3875
        test_neg_clear
3876
 
3877
        test_h_gr32 long_dest er0
3878
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3879
        test_gr_a5a5 2
3880
        test_gr_a5a5 3
3881
        test_gr_a5a5 4
3882
        test_gr_a5a5 5
3883
        test_gr_a5a5 6
3884
        test_gr_a5a5 7
3885
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3886
        ;; -> 0000 0000 0000 0000 1010 0101 1010 0101
3887
        cmp.l   #0x0000a5a5, @long_dest
3888
        beq     .Llpreinc16
3889
        fail
3890
.Llpreinc16:
3891
        mov     #0xa5a5a5a5, @long_dest
3892
 
3893
shlr_l_predec_16:
3894
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3895
        set_ccr_zero
3896
 
3897
        mov     #long_dest+4, er0
3898
        shlr.l  #16, @-er0      ; shift right logical by sixteen, predec
3899
;;;     .word   0x0107
3900
;;;     .word   0x6d08
3901
;;;     .word   0x11f8
3902
 
3903
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3904
        test_zero_clear
3905
        test_ovf_clear
3906
        test_neg_clear
3907
 
3908
        test_h_gr32 long_dest er0
3909
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3910
        test_gr_a5a5 2
3911
        test_gr_a5a5 3
3912
        test_gr_a5a5 4
3913
        test_gr_a5a5 5
3914
        test_gr_a5a5 6
3915
        test_gr_a5a5 7
3916
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3917
        ;; -> 0000 0000 0000 0000 1010 0101 1010 0101
3918
        cmp.l   #0x0000a5a5, @long_dest
3919
        beq     .Llpredec16
3920
        fail
3921
.Llpredec16:
3922
        mov     #0xa5a5a5a5, @long_dest
3923
 
3924
shlr_l_disp2_16:
3925
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3926
        set_ccr_zero
3927
 
3928
        mov     #long_dest-8, er0
3929
        shlr.l  #16, @(8:2, er0)        ; shift right logical by 16, dest2
3930
;;;     .word   0x0106
3931
;;;     .word   0x6908
3932
;;;     .word   0x11f8
3933
 
3934
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3935
        test_zero_clear
3936
        test_ovf_clear
3937
        test_neg_clear
3938
 
3939
        test_h_gr32 long_dest-8 er0
3940
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3941
        test_gr_a5a5 2
3942
        test_gr_a5a5 3
3943
        test_gr_a5a5 4
3944
        test_gr_a5a5 5
3945
        test_gr_a5a5 6
3946
        test_gr_a5a5 7
3947
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3948
        ;; -> 0000 0000 0000 0000 1010 0101 1010 0101
3949
        cmp.l   #0x0000a5a5, @long_dest
3950
        beq     .Lldisp216
3951
        fail
3952
.Lldisp216:
3953
        mov     #0xa5a5a5a5, @long_dest
3954
 
3955
shlr_l_disp16_16:
3956
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3957
        set_ccr_zero
3958
 
3959
        mov     #long_dest-44, er0
3960
        shlr.l  #16, @(44:16, er0)      ; shift right logical by 16, disp16
3961
;;;     .word   0x0104
3962
;;;     .word   0x6f08
3963
;;;     .word   44
3964
;;;     .word   0x11f8
3965
 
3966
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3967
        test_zero_clear
3968
        test_ovf_clear
3969
        test_neg_clear
3970
 
3971
        test_h_gr32 long_dest-44 er0
3972
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
3973
        test_gr_a5a5 2
3974
        test_gr_a5a5 3
3975
        test_gr_a5a5 4
3976
        test_gr_a5a5 5
3977
        test_gr_a5a5 6
3978
        test_gr_a5a5 7
3979
        ; 1010 0101 1010 0101 1010 0101 1010 0101
3980
        ;; -> 0000 0000 0000 0000 1010 0101 1010 0101
3981
        cmp.l   #0x0000a5a5, @long_dest
3982
        beq     .Lldisp1616
3983
        fail
3984
.Lldisp1616:
3985
        mov     #0xa5a5a5a5, @long_dest
3986
 
3987
shlr_l_disp32_16:
3988
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
3989
        set_ccr_zero
3990
 
3991
        mov     #long_dest-666, er0
3992
        shlr.l  #16, @(666:32, er0)     ; shift right logical by 16, disp32
3993
;;;     .word   0x7884
3994
;;;     .word   0x6b28
3995
;;;     .long   666
3996
;;;     .word   0x11f8
3997
 
3998
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
3999
        test_zero_clear
4000
        test_ovf_clear
4001
        test_neg_clear
4002
 
4003
        test_h_gr32 long_dest-666 er0
4004
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
4005
        test_gr_a5a5 2
4006
        test_gr_a5a5 3
4007
        test_gr_a5a5 4
4008
        test_gr_a5a5 5
4009
        test_gr_a5a5 6
4010
        test_gr_a5a5 7
4011
        ; 1010 0101 1010 0101 1010 0101 1010 0101
4012
        ;; -> 0000 0000 0000 0000 1010 0101 1010 0101
4013
        cmp.l   #0x0000a5a5, @long_dest
4014
        beq     .Lldisp3216
4015
        fail
4016
.Lldisp3216:
4017
        mov     #0xa5a5a5a5, @long_dest
4018
 
4019
shlr_l_abs16_16:
4020
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
4021
        set_ccr_zero
4022
 
4023
        shlr.l  #16, @long_dest:16      ; shift right logical by 16, abs16
4024
;;;     .word   0x0104
4025
;;;     .word   0x6b08
4026
;;;     .word   long_dest
4027
;;;     .word   0x11f8
4028
 
4029
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
4030
        test_zero_clear
4031
        test_ovf_clear
4032
        test_neg_clear
4033
 
4034
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
4035
        test_gr_a5a5 1
4036
        test_gr_a5a5 2
4037
        test_gr_a5a5 3
4038
        test_gr_a5a5 4
4039
        test_gr_a5a5 5
4040
        test_gr_a5a5 6
4041
        test_gr_a5a5 7
4042
        ; 1010 0101 1010 0101 1010 0101 1010 0101
4043
        ;; -> 0000 0000 0000 0000 1010 0101 1010 0101
4044
        cmp.l   #0x0000a5a5, @long_dest
4045
        beq     .Llabs1616
4046
        fail
4047
.Llabs1616:
4048
        mov     #0xa5a5a5a5, @long_dest
4049
 
4050
shlr_l_abs32_16:
4051
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
4052
        set_ccr_zero
4053
 
4054
        shlr.l  #16, @long_dest:32      ; shift right logical by 16, abs32
4055
;;;     .word   0x0104
4056
;;;     .word   0x6b28
4057
;;;     .long   long_dest
4058
;;;     .word   0x11f8
4059
 
4060
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
4061
        test_zero_clear
4062
        test_ovf_clear
4063
        test_neg_clear
4064
 
4065
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
4066
        test_gr_a5a5 1
4067
        test_gr_a5a5 2
4068
        test_gr_a5a5 3
4069
        test_gr_a5a5 4
4070
        test_gr_a5a5 5
4071
        test_gr_a5a5 6
4072
        test_gr_a5a5 7
4073
        ; 1010 0101 1010 0101 1010 0101 1010 0101
4074
        ;; -> 0000 0000 0000 0000 1010 0101 1010 0101
4075
        cmp.l   #0x0000a5a5, @long_dest
4076
        beq     .Llabs3216
4077
        fail
4078
.Llabs3216:
4079
        mov     #0xa5a5a5a5, @long_dest
4080
.endif
4081
.endif
4082
        pass
4083
 
4084
        exit 0
4085
 

powered by: WebSVN 2.1.0

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