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

Subversion Repositories scarts

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 26 jlechner
# Hitachi H8 testcase 'neg.b, neg.w, neg.l'
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
        # Instructions tested:
14
        # neg.b rd      ;                     1 7 8  rd
15
        # neg.b @erd    ;         7 d rd ???? 1 7 8  ignore
16
        # neg.b @erd+   ; 0 1 7 4 6 c rd 1??? 1 7 8  ignore
17
        # neg.b @erd-   ; 0 1 7 6 6 c rd 1??? 1 7 8  ignore
18
        # neg.b @+erd   ; 0 1 7 5 6 c rd 1??? 1 7 8  ignore
19
        # neg.b @-erd   ; 0 1 7 7 6 c rd 1??? 1 7 8  ignore
20
        # neg.b @(d:2,  erd)    ; 0 1 7 01dd  6 8 rd 8 1 7 8  ignore
21
        # neg.b @(d:16, erd)    ; 0 1 7  4 6 e rd 1??? dd:16 1 7 8  ignore
22
        # neg.b @(d:32, erd)    ; 7 8 rd 4 6 a  2 1??? dd:32 1 7 8  ignore
23
        # neg.b @aa:16          ; 6 a 1 1??? aa:16 1 7 8  ignore
24
        # neg.b @aa:32          ; 6 a 3 1??? aa:32 1 7 8  ignore
25
        # word operations
26
        # long operations
27
        #
28
        # Coming soon:
29
        # neg.b @aa:8           ; 7 f aaaaaaaa 1 7 8  ignore
30
        #
31
 
32
        .data
33
byte_dest:      .byte 0xa5
34
        .align 2
35
word_dest:      .word 0xa5a5
36
        .align 4
37
long_dest:      .long 0xa5a5a5a5
38
        start
39
 
40
        #
41
        # Note: apparently carry is set for neg of anything except zero.
42
        #
43
 
44
        #
45
        # 8-bit byte operations
46
        #
47
 
48
neg_b_reg8:
49
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
50
        set_ccr_zero
51
 
52
        ;;  neg.b Rd
53
        neg     r0l             ; 8-bit register
54
;;;     .word   0x1788
55
 
56
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
57
        test_ovf_clear
58
        test_zero_clear
59
        test_neg_clear
60
 
61
        cmp.b   #0x5b, r0l      ; result of "neg 0xa5"
62
        beq     .Lbrd
63
        fail
64
.Lbrd:
65
        test_h_gr16 0xa55b r0   ; r0 changed by 'neg'
66
.if (sim_cpu)                   ; non-zero means h8300h, s, or sx
67
        test_h_gr32 0xa5a5a55b er0      ; er0 changed by 'neg' 
68
.endif
69
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
70
        test_gr_a5a5 2
71
        test_gr_a5a5 3
72
        test_gr_a5a5 4
73
        test_gr_a5a5 5
74
        test_gr_a5a5 6
75
        test_gr_a5a5 7
76
 
77
.if (sim_cpu == h8sx)
78
neg_b_rdind:
79
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
80
        set_ccr_zero
81
 
82
        ;;  neg.b @eRd
83
        mov     #byte_dest, er0
84
        neg.b   @er0            ; register indirect operand
85
;;;     .word   0x7d00
86
;;;     .word   0x1780
87
 
88
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
89
        test_ovf_clear
90
        test_zero_clear
91
        test_neg_clear
92
 
93
        test_h_gr32 byte_dest er0       ; er0 still contains address
94
        cmp.b   #0x5b, @er0     ; memory contents changed
95
        beq     .Lbind
96
        fail
97
.Lbind:
98
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
99
        test_gr_a5a5 2
100
        test_gr_a5a5 3
101
        test_gr_a5a5 4
102
        test_gr_a5a5 5
103
        test_gr_a5a5 6
104
        test_gr_a5a5 7
105
 
106
neg_b_rdpostinc:
107
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
108
        set_ccr_zero
109
 
110
        ;;  neg.b @eRd+
111
        mov     #byte_dest, er0 ; register post-increment operand
112
        neg.b   @er0+
113
;;;     .word   0x0174
114
;;;     .word   0x6c08
115
;;;     .word   0x1780
116
 
117
        test_carry_set          ; H=0 N=1 Z=0 V=0 C=1
118
        test_ovf_clear
119
        test_zero_clear
120
        test_neg_set
121
 
122
        test_h_gr32 byte_dest+1 er0     ; er0 contains address plus one
123
        cmp.b   #0xa5, @-er0
124
        beq     .Lbpostinc
125
        fail
126
.Lbpostinc:
127
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
128
        test_gr_a5a5 2
129
        test_gr_a5a5 3
130
        test_gr_a5a5 4
131
        test_gr_a5a5 5
132
        test_gr_a5a5 6
133
        test_gr_a5a5 7
134
 
135
neg_b_rdpostdec:
136
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
137
        set_ccr_zero
138
 
139
        ;;  neg.b @eRd-
140
        mov     #byte_dest, er0 ; register post-decrement operand
141
        neg.b   @er0-
142
;;;     .word   0x0176
143
;;;     .word   0x6c08
144
;;;     .word   0x1780
145
 
146
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
147
        test_ovf_clear
148
        test_zero_clear
149
        test_neg_clear
150
 
151
        test_h_gr32 byte_dest-1 er0     ; er0 contains address minus one
152
        cmp.b   #0x5b, @+er0
153
        beq     .Lbpostdec
154
        fail
155
.Lbpostdec:
156
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
157
        test_gr_a5a5 2
158
        test_gr_a5a5 3
159
        test_gr_a5a5 4
160
        test_gr_a5a5 5
161
        test_gr_a5a5 6
162
        test_gr_a5a5 7
163
 
164
neg_b_rdpreinc:
165
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
166
        set_ccr_zero
167
 
168
        ;;  neg.b @+eRd
169
        mov     #byte_dest-1, er0
170
        neg.b   @+er0                   ; reg pre-increment operand
171
;;;     .word   0x0175
172
;;;     .word   0x6c08
173
;;;     .word   0x1780
174
 
175
        test_carry_set          ; H=0 N=1 Z=0 V=0 C=1
176
        test_ovf_clear
177
        test_zero_clear
178
        test_neg_set
179
 
180
        cmp.b   #0xa5, @er0
181
        beq     .Lbpreinc
182
        fail
183
.Lbpreinc:
184
        test_h_gr32 byte_dest er0       ; er0 contains destination address 
185
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
186
        test_gr_a5a5 2
187
        test_gr_a5a5 3
188
        test_gr_a5a5 4
189
        test_gr_a5a5 5
190
        test_gr_a5a5 6
191
        test_gr_a5a5 7
192
 
193
neg_b_rdpredec:
194
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
195
        set_ccr_zero
196
 
197
        ;;  neg.b @-eRd
198
        mov     #byte_dest+1, er0
199
        neg.b   @-er0           ; reg pre-decr operand
200
;;;     .word   0x0177
201
;;;     .word   0x6c08
202
;;;     .word   0x1780
203
 
204
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
205
        test_ovf_clear
206
        test_zero_clear
207
        test_neg_clear
208
 
209
        cmp.b   #0x5b, @er0
210
        beq     .Lbpredec
211
        fail
212
.Lbpredec:
213
        test_h_gr32 byte_dest er0       ; er0 contains destination address 
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
 
222
neg_b_disp2dst:
223
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
224
        set_ccr_zero
225
 
226
        ;;  neg.b @(dd:2, erd)
227
        mov     #byte_dest-1, er0
228
        neg.b   @(1:2, er0)     ; reg plus 2-bit displacement
229
;;;     .word   0x0175
230
;;;     .word   0x6808
231
;;;     .word   0x1780
232
 
233
        test_carry_set          ; H=0 N=1 Z=0 V=0 C=1
234
        test_ovf_clear
235
        test_zero_clear
236
        test_neg_set
237
 
238
        cmp.b   #0xa5, @+er0
239
        beq     .Lbdisp2
240
        fail
241
.Lbdisp2:
242
        test_h_gr32 byte_dest er0       ; er0 contains destination address 
243
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
244
        test_gr_a5a5 2
245
        test_gr_a5a5 3
246
        test_gr_a5a5 4
247
        test_gr_a5a5 5
248
        test_gr_a5a5 6
249
        test_gr_a5a5 7
250
 
251
neg_b_disp16dst:
252
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
253
        set_ccr_zero
254
 
255
        ;;  neg.b @(dd:16, erd)
256
        mov     #byte_dest+100, er0
257
        neg.b   @(-100:16, er0) ; reg plus 16-bit displacement
258
;;;     .word   0x0174
259
;;;     .word   0x6e08
260
;;;     .word   -100
261
;;;     .word   0x1780
262
 
263
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
264
        test_ovf_clear
265
        test_zero_clear
266
        test_neg_clear
267
 
268
        cmp.b   #0x5b, @byte_dest
269
        beq     .Lbdisp16
270
        fail
271
.Lbdisp16:
272
        test_h_gr32 byte_dest+100 er0   ; er0 contains destination address 
273
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
274
        test_gr_a5a5 2
275
        test_gr_a5a5 3
276
        test_gr_a5a5 4
277
        test_gr_a5a5 5
278
        test_gr_a5a5 6
279
        test_gr_a5a5 7
280
 
281
neg_b_disp32dst:
282
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
283
        set_ccr_zero
284
 
285
        ;;  neg.b @(dd:32, erd)
286
        mov     #byte_dest-0xfffff, er0
287
        neg.b   @(0xfffff:32, er0)      ; reg plus 32-bit displacement
288
;;;     .word   0x7804
289
;;;     .word   0x6a28
290
;;;     .long   0xfffff
291
;;;     .word   0x1780
292
 
293
        test_carry_set          ; H=0 N=1 Z=0 V=0 C=1
294
        test_ovf_clear
295
        test_zero_clear
296
        test_neg_set
297
 
298
        cmp.b   #0xa5, @byte_dest
299
        beq     .Lbdisp32
300
        fail
301
.Lbdisp32:
302
        test_h_gr32 byte_dest-0xfffff er0 ; er0 contains destination address
303
        test_gr_a5a5 1          ; Make sure other general regs not disturbed
304
        test_gr_a5a5 2
305
        test_gr_a5a5 3
306
        test_gr_a5a5 4
307
        test_gr_a5a5 5
308
        test_gr_a5a5 6
309
        test_gr_a5a5 7
310
 
311
neg_b_abs16dst:
312
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
313
        set_ccr_zero
314
 
315
        ;;  neg.b @aa:16
316
        neg.b   @byte_dest:16   ; 16-bit absolute address
317
;;;     .word   0x6a18
318
;;;     .word   byte_dest
319
;;;     .word   0x1780
320
 
321
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
322
        test_ovf_clear
323
        test_zero_clear
324
        test_neg_clear
325
 
326
        cmp.b   #0x5b, @byte_dest
327
        beq     .Lbabs16
328
        fail
329
.Lbabs16:
330
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
331
        test_gr_a5a5 1
332
        test_gr_a5a5 2
333
        test_gr_a5a5 3
334
        test_gr_a5a5 4
335
        test_gr_a5a5 5
336
        test_gr_a5a5 6
337
        test_gr_a5a5 7
338
 
339
neg_b_abs32dst:
340
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
341
        set_ccr_zero
342
 
343
        ;;  neg.b @aa:32
344
        neg.b   @byte_dest:32   ; 32-bit absolute address
345
;;;     .word   0x6a38
346
;;;     .long   byte_dest
347
;;;     .word   0x1780
348
 
349
        test_carry_set          ; H=0 N=1 Z=0 V=0 C=1
350
        test_ovf_clear
351
        test_zero_clear
352
        test_neg_set
353
 
354
        cmp.b   #0xa5, @byte_dest
355
        beq     .Lbabs32
356
        fail
357
.Lbabs32:
358
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
359
        test_gr_a5a5 1
360
        test_gr_a5a5 2
361
        test_gr_a5a5 3
362
        test_gr_a5a5 4
363
        test_gr_a5a5 5
364
        test_gr_a5a5 6
365
        test_gr_a5a5 7
366
.endif
367
 
368
        #
369
        # 16-bit word operations
370
        #
371
 
372
.if (sim_cpu)                   ; any except plain-vanilla h8/300
373
neg_w_reg16:
374
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
375
        set_ccr_zero
376
 
377
        ;;  neg.w Rd
378
        neg     r1              ; 16-bit register operand
379
;;;     .word   0x1791
380
 
381
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
382
        test_ovf_clear
383
        test_zero_clear
384
        test_neg_clear
385
 
386
        cmp.w   #0x5a5b, r1     ; result of "neg 0xa5a5"
387
        beq     .Lwrd
388
        fail
389
.Lwrd:
390
        test_h_gr32 0xa5a55a5b er1      ; er1 changed by 'neg' 
391
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
392
        test_gr_a5a5 2
393
        test_gr_a5a5 3
394
        test_gr_a5a5 4
395
        test_gr_a5a5 5
396
        test_gr_a5a5 6
397
        test_gr_a5a5 7
398
 
399
.if (sim_cpu == h8sx)
400
neg_w_rdind:
401
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
402
        set_ccr_zero
403
 
404
        ;;  neg.w @eRd
405
        mov     #word_dest, er1
406
        neg.w   @er1            ; register indirect operand
407
;;;     .word   0x0154
408
;;;     .word   0x6d18
409
;;;     .word   0x1790
410
 
411
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
412
        test_ovf_clear
413
        test_zero_clear
414
        test_neg_clear
415
 
416
        cmp.w   #0x5a5b, @word_dest     ; memory contents changed
417
        beq     .Lwind
418
        fail
419
.Lwind:
420
        test_h_gr32 word_dest er1       ; er1 still contains address
421
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
422
        test_gr_a5a5 2
423
        test_gr_a5a5 3
424
        test_gr_a5a5 4
425
        test_gr_a5a5 5
426
        test_gr_a5a5 6
427
        test_gr_a5a5 7
428
 
429
neg_w_rdpostinc:
430
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
431
        set_ccr_zero
432
 
433
        ;;  neg.w @eRd+
434
        mov     #word_dest, er1 ; register post-increment operand
435
        neg.w   @er1+
436
;;;     .word   0x0154
437
;;;     .word   0x6d18
438
;;;     .word   0x1790
439
 
440
        test_carry_set          ; H=0 N=1 Z=0 V=0 C=1
441
        test_ovf_clear
442
        test_zero_clear
443
        test_neg_set
444
 
445
        cmp.w   #0xa5a5, @word_dest
446
        beq     .Lwpostinc
447
        fail
448
.Lwpostinc:
449
        test_h_gr32 word_dest+2 er1     ; er1 contains address plus two
450
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
451
        test_gr_a5a5 2
452
        test_gr_a5a5 3
453
        test_gr_a5a5 4
454
        test_gr_a5a5 5
455
        test_gr_a5a5 6
456
        test_gr_a5a5 7
457
 
458
neg_w_rdpostdec:
459
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
460
        set_ccr_zero
461
 
462
        ;;  neg.w @eRd-
463
        mov     #word_dest, er1
464
        neg.w   @er1-
465
;;;     .word   0x0156
466
;;;     .word   0x6d18
467
;;;     .word   0x1790
468
 
469
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
470
        test_ovf_clear
471
        test_zero_clear
472
        test_neg_clear
473
 
474
        cmp.w   #0x5a5b, @word_dest
475
        beq     .Lwpostdec
476
        fail
477
.Lwpostdec:
478
        test_h_gr32 word_dest-2 er1     ; er1 contains address minus two
479
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
480
        test_gr_a5a5 2
481
        test_gr_a5a5 3
482
        test_gr_a5a5 4
483
        test_gr_a5a5 5
484
        test_gr_a5a5 6
485
        test_gr_a5a5 7
486
 
487
neg_w_rdpreinc:
488
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
489
        set_ccr_zero
490
 
491
        ;;  neg.w @+eRd
492
        mov     #word_dest-2, er1
493
        neg.w   @+er1           ; reg pre-increment operand
494
;;;     .word   0x0155
495
;;;     .word   0x6d18
496
;;;     .word   0x1790
497
 
498
        test_carry_set          ; H=0 N=1 Z=0 V=0 C=1
499
        test_ovf_clear
500
        test_zero_clear
501
        test_neg_set
502
 
503
        cmp.w   #0xa5a5, @word_dest
504
        beq     .Lwpreinc
505
        fail
506
.Lwpreinc:
507
        test_h_gr32 word_dest er1       ; er1 contains destination address 
508
        test_gr_a5a5 0           ; 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
 
516
neg_w_rdpredec:
517
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
518
        set_ccr_zero
519
 
520
        ;;  neg.w @-eRd
521
        mov     #word_dest+2, er1
522
        neg.w   @-er1           ; reg pre-decr operand
523
;;;     .word   0x0157
524
;;;     .word   0x6d18
525
;;;     .word   0x1790
526
 
527
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
528
        test_ovf_clear
529
        test_zero_clear
530
        test_neg_clear
531
 
532
        cmp.w   #0x5a5b, @word_dest
533
        beq     .Lwpredec
534
        fail
535
.Lwpredec:
536
        test_h_gr32 word_dest er1       ; er1 contains destination address 
537
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
538
        test_gr_a5a5 2
539
        test_gr_a5a5 3
540
        test_gr_a5a5 4
541
        test_gr_a5a5 5
542
        test_gr_a5a5 6
543
        test_gr_a5a5 7
544
 
545
neg_w_disp2dst:
546
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
547
        set_ccr_zero
548
 
549
        ;;  neg.w @(dd:2, erd)
550
        mov     #word_dest-2, er1
551
        neg.w   @(2:2, er1)     ; reg plus 2-bit displacement
552
;;;     .word   0x0155
553
;;;     .word   0x6918
554
;;;     .word   0x1790
555
 
556
        test_carry_set          ; H=0 N=1 Z=0 V=0 C=1
557
        test_ovf_clear
558
        test_zero_clear
559
        test_neg_set
560
 
561
        cmp.w   #0xa5a5, @word_dest
562
        beq     .Lwdisp2
563
        fail
564
.Lwdisp2:
565
        test_h_gr32 word_dest-2 er1     ; er1 contains address minus one
566
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
567
        test_gr_a5a5 2
568
        test_gr_a5a5 3
569
        test_gr_a5a5 4
570
        test_gr_a5a5 5
571
        test_gr_a5a5 6
572
        test_gr_a5a5 7
573
 
574
neg_w_disp16dst:
575
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
576
        set_ccr_zero
577
 
578
        ;;  neg.w @(dd:16, erd)
579
        mov     #word_dest+100, er1
580
        neg.w   @(-100:16, er1) ; reg plus 16-bit displacement
581
;;;     .word   0x0154
582
;;;     .word   0x6f18
583
;;;     .word   -100
584
;;;     .word   0x1790
585
 
586
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
587
        test_ovf_clear
588
        test_zero_clear
589
        test_neg_clear
590
 
591
        cmp.w   #0x5a5b, @word_dest
592
        beq     .Lwdisp16
593
        fail
594
.Lwdisp16:
595
        test_h_gr32 word_dest+100 er1   ; er1 contains destination address 
596
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
597
        test_gr_a5a5 2
598
        test_gr_a5a5 3
599
        test_gr_a5a5 4
600
        test_gr_a5a5 5
601
        test_gr_a5a5 6
602
        test_gr_a5a5 7
603
 
604
neg_w_disp32dst:
605
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
606
        set_ccr_zero
607
 
608
        ;;  neg.w @(dd:32, erd)
609
        mov     #word_dest-0xfffff, er1
610
        neg.w   @(0xfffff:32, er1)      ; reg plus 32-bit displacement
611
;;;     .word   0x7814
612
;;;     .word   0x6b28
613
;;;     .long   0xfffff
614
;;;     .word   0x1790
615
 
616
        test_carry_set          ; H=0 N=1 Z=0 V=0 C=1
617
        test_ovf_clear
618
        test_zero_clear
619
        test_neg_set
620
 
621
        cmp.w   #0xa5a5, @word_dest
622
        beq     .Lwdisp32
623
        fail
624
.Lwdisp32:
625
        test_h_gr32 word_dest-0xfffff er1 ; er1 contains destination address
626
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
627
        test_gr_a5a5 2
628
        test_gr_a5a5 3
629
        test_gr_a5a5 4
630
        test_gr_a5a5 5
631
        test_gr_a5a5 6
632
        test_gr_a5a5 7
633
 
634
neg_w_abs16dst:
635
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
636
        set_ccr_zero
637
 
638
        ;;  neg.w @aa:16
639
        neg.w   @word_dest:16   ; 16-bit absolute address
640
;;;     .word   0x6b18
641
;;;     .word   word_dest
642
;;;     .word   0x1790
643
 
644
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
645
        test_ovf_clear
646
        test_zero_clear
647
        test_neg_clear
648
 
649
        cmp.w   #0x5a5b, @word_dest
650
        beq     .Lwabs16
651
        fail
652
.Lwabs16:
653
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
654
        test_gr_a5a5 1
655
        test_gr_a5a5 2
656
        test_gr_a5a5 3
657
        test_gr_a5a5 4
658
        test_gr_a5a5 5
659
        test_gr_a5a5 6
660
        test_gr_a5a5 7
661
 
662
neg_w_abs32dst:
663
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
664
        set_ccr_zero
665
 
666
        ;;  neg.w @aa:32
667
        neg.w   @word_dest:32   ; 32-bit absolute address
668
;;;     .word   0x6b38
669
;;;     .long   word_dest
670
;;;     .word   0x1790
671
 
672
        test_carry_set          ; H=0 N=1 Z=0 V=0 C=1
673
        test_ovf_clear
674
        test_zero_clear
675
        test_neg_set
676
 
677
        cmp.w   #0xa5a5, @word_dest
678
        beq     .Lwabs32
679
        fail
680
.Lwabs32:
681
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
682
        test_gr_a5a5 1
683
        test_gr_a5a5 2
684
        test_gr_a5a5 3
685
        test_gr_a5a5 4
686
        test_gr_a5a5 5
687
        test_gr_a5a5 6
688
        test_gr_a5a5 7
689
 
690
.endif                          ; h8sx
691
.endif                          ; h8/300
692
 
693
        #
694
        # 32-bit word operations
695
        #
696
 
697
.if (sim_cpu)                   ; any except plain-vanilla h8/300
698
neg_l_reg16:
699
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
700
        set_ccr_zero
701
 
702
        ;;  neg.l eRd
703
        neg     er1             ; 32-bit register operand
704
;;;     .word   0x17b1
705
 
706
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
707
        test_ovf_clear
708
        test_zero_clear
709
        test_neg_clear
710
 
711
        cmp.l   #0x5a5a5a5b, er1        ; result of "neg 0xa5a5a5a5"
712
        beq     .Llrd
713
        fail
714
.Llrd:
715
        test_h_gr32 0x5a5a5a5b er1      ; er1 changed by 'neg' 
716
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
717
        test_gr_a5a5 2
718
        test_gr_a5a5 3
719
        test_gr_a5a5 4
720
        test_gr_a5a5 5
721
        test_gr_a5a5 6
722
        test_gr_a5a5 7
723
 
724
.if (sim_cpu == h8sx)
725
neg_l_rdind:
726
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
727
        set_ccr_zero
728
 
729
        ;;  neg.l @eRd
730
        mov     #long_dest, er1
731
        neg.l   @er1            ; register indirect operand
732
;;;     .word   0x0104
733
;;;     .word   0x6d18
734
;;;     .word   0x17b0
735
 
736
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
737
        test_ovf_clear
738
        test_zero_clear
739
        test_neg_clear
740
 
741
        cmp.l   #0x5a5a5a5b, @long_dest ; memory contents changed
742
        beq     .Llind
743
        fail
744
.Llind:
745
        test_h_gr32 long_dest er1       ; er1 still contains address
746
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
747
        test_gr_a5a5 2
748
        test_gr_a5a5 3
749
        test_gr_a5a5 4
750
        test_gr_a5a5 5
751
        test_gr_a5a5 6
752
        test_gr_a5a5 7
753
 
754
neg_l_rdpostinc:
755
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
756
        set_ccr_zero
757
 
758
        ;;  neg.l @eRd+
759
        mov     #long_dest, er1 ; register post-increment operand
760
        neg.l   @er1+
761
;;;     .word   0x0104
762
;;;     .word   0x6d18
763
;;;     .word   0x17b0
764
 
765
        test_carry_set          ; H=0 N=1 Z=0 V=0 C=1
766
        test_ovf_clear
767
        test_zero_clear
768
        test_neg_set
769
 
770
        cmp.l   #0xa5a5a5a5, @long_dest
771
        beq     .Llpostinc
772
        fail
773
.Llpostinc:
774
        test_h_gr32 long_dest+4 er1     ; er1 contains address plus two
775
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
776
        test_gr_a5a5 2
777
        test_gr_a5a5 3
778
        test_gr_a5a5 4
779
        test_gr_a5a5 5
780
        test_gr_a5a5 6
781
        test_gr_a5a5 7
782
 
783
neg_l_rdpostdec:
784
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
785
        set_ccr_zero
786
 
787
        ;;  neg.l @eRd-
788
        mov     #long_dest, er1
789
        neg.l   @er1-
790
;;;     .word   0x0106
791
;;;     .word   0x6d18
792
;;;     .word   0x17b0
793
 
794
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
795
        test_ovf_clear
796
        test_zero_clear
797
        test_neg_clear
798
 
799
        cmp.l   #0x5a5a5a5b, @long_dest
800
        beq     .Llpostdec
801
        fail
802
.Llpostdec:
803
        test_h_gr32 long_dest-4 er1     ; er1 contains address minus two
804
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
805
        test_gr_a5a5 2
806
        test_gr_a5a5 3
807
        test_gr_a5a5 4
808
        test_gr_a5a5 5
809
        test_gr_a5a5 6
810
        test_gr_a5a5 7
811
 
812
neg_l_rdpreinc:
813
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
814
        set_ccr_zero
815
 
816
        ;;  neg.l @+eRd
817
        mov     #long_dest-4, er1
818
        neg.l   @+er1           ; reg pre-increment operand
819
;;;     .word   0x0105
820
;;;     .word   0x6d18
821
;;;     .word   0x17b0
822
 
823
        test_carry_set          ; H=0 N=1 Z=0 V=0 C=1
824
        test_ovf_clear
825
        test_zero_clear
826
        test_neg_set
827
 
828
        cmp.l   #0xa5a5a5a5, @long_dest
829
        beq     .Llpreinc
830
        fail
831
.Llpreinc:
832
        test_h_gr32 long_dest er1       ; er1 contains destination address 
833
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
834
        test_gr_a5a5 2
835
        test_gr_a5a5 3
836
        test_gr_a5a5 4
837
        test_gr_a5a5 5
838
        test_gr_a5a5 6
839
        test_gr_a5a5 7
840
 
841
neg_l_rdpredec:
842
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
843
        set_ccr_zero
844
 
845
        ;;  neg.l @-eRd
846
        mov     #long_dest+4, er1
847
        neg.l   @-er1           ; reg pre-decr operand
848
;;;     .word   0x0107
849
;;;     .word   0x6d18
850
;;;     .word   0x17b0
851
 
852
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
853
        test_ovf_clear
854
        test_zero_clear
855
        test_neg_clear
856
 
857
        cmp.l   #0x5a5a5a5b, @long_dest
858
        beq     .Llpredec
859
        fail
860
.Llpredec:
861
        test_h_gr32 long_dest er1       ; er1 contains destination address 
862
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
863
        test_gr_a5a5 2
864
        test_gr_a5a5 3
865
        test_gr_a5a5 4
866
        test_gr_a5a5 5
867
        test_gr_a5a5 6
868
        test_gr_a5a5 7
869
 
870
neg_l_disp2dst:
871
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
872
        set_ccr_zero
873
 
874
        ;;  neg.l @(dd:2, erd)
875
        mov     #long_dest-4, er1
876
        neg.l   @(4:2, er1)     ; reg plus 2-bit displacement
877
;;;     .word   0x0105
878
;;;     .word   0x6918
879
;;;     .word   0x17b0
880
 
881
        test_carry_set          ; H=0 N=1 Z=0 V=0 C=1
882
        test_ovf_clear
883
        test_zero_clear
884
        test_neg_set
885
 
886
        cmp.l   #0xa5a5a5a5, @long_dest
887
        beq     .Lldisp2
888
        fail
889
.Lldisp2:
890
        test_h_gr32 long_dest-4 er1     ; er1 contains address minus one
891
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
892
        test_gr_a5a5 2
893
        test_gr_a5a5 3
894
        test_gr_a5a5 4
895
        test_gr_a5a5 5
896
        test_gr_a5a5 6
897
        test_gr_a5a5 7
898
 
899
neg_l_disp16dst:
900
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
901
        set_ccr_zero
902
 
903
        ;;  neg.l @(dd:16, erd)
904
        mov     #long_dest+100, er1
905
        neg.l   @(-100:16, er1) ; reg plus 16-bit displacement
906
;;;     .word   0x0104
907
;;;     .word   0x6f18
908
;;;     .word   -100
909
;;;     .word   0x17b0
910
 
911
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
912
        test_ovf_clear
913
        test_zero_clear
914
        test_neg_clear
915
 
916
        cmp.l   #0x5a5a5a5b, @long_dest
917
        beq     .Lldisp16
918
        fail
919
.Lldisp16:
920
        test_h_gr32 long_dest+100 er1   ; er1 contains destination address 
921
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
922
        test_gr_a5a5 2
923
        test_gr_a5a5 3
924
        test_gr_a5a5 4
925
        test_gr_a5a5 5
926
        test_gr_a5a5 6
927
        test_gr_a5a5 7
928
 
929
neg_l_disp32dst:
930
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
931
        set_ccr_zero
932
 
933
        ;;  neg.l @(dd:32, erd)
934
        mov     #long_dest-0xfffff, er1
935
        neg.l   @(0xfffff:32, er1)      ; reg plus 32-bit displacement
936
;;;     .word   0x7894
937
;;;     .word   0x6b28
938
;;;     .long   0xfffff
939
;;;     .word   0x17b0
940
 
941
        test_carry_set          ; H=0 N=1 Z=0 V=0 C=1
942
        test_ovf_clear
943
        test_zero_clear
944
        test_neg_set
945
 
946
        cmp.l   #0xa5a5a5a5, @long_dest
947
        beq     .Lldisp32
948
        fail
949
.Lldisp32:
950
        test_h_gr32 long_dest-0xfffff er1 ; er1 contains destination address
951
        test_gr_a5a5 0           ; Make sure other general regs not disturbed
952
        test_gr_a5a5 2
953
        test_gr_a5a5 3
954
        test_gr_a5a5 4
955
        test_gr_a5a5 5
956
        test_gr_a5a5 6
957
        test_gr_a5a5 7
958
 
959
neg_l_abs16dst:
960
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
961
        set_ccr_zero
962
 
963
        ;;  neg.l @aa:16
964
        neg.l   @long_dest:16   ; 16-bit absolute address
965
;;;     .word   0x0104
966
;;;     .word   0x6b08
967
;;;     .word   long_dest
968
;;;     .word   0x17b0
969
 
970
        test_carry_set          ; H=0 N=0 Z=0 V=0 C=1
971
        test_ovf_clear
972
        test_zero_clear
973
        test_neg_clear
974
 
975
        cmp.l   #0x5a5a5a5b, @long_dest
976
        beq     .Llabs16
977
        fail
978
.Llabs16:
979
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
980
        test_gr_a5a5 1
981
        test_gr_a5a5 2
982
        test_gr_a5a5 3
983
        test_gr_a5a5 4
984
        test_gr_a5a5 5
985
        test_gr_a5a5 6
986
        test_gr_a5a5 7
987
 
988
neg_l_abs32dst:
989
        set_grs_a5a5            ; Fill all general regs with a fixed pattern
990
        set_ccr_zero
991
 
992
        ;;  neg.l @aa:32
993
        neg.l   @long_dest:32   ; 32-bit absolute address
994
;;;     .word   0x0104
995
;;;     .word   0x6b28
996
;;;     .long   long_dest
997
;;;     .word   0x17b0
998
 
999
        test_carry_set          ; H=0 N=1 Z=0 V=0 C=1
1000
        test_ovf_clear
1001
        test_zero_clear
1002
        test_neg_set
1003
 
1004
        cmp.l   #0xa5a5a5a5, @long_dest
1005
        beq     .Llabs32
1006
        fail
1007
.Llabs32:
1008
        test_gr_a5a5 0           ; Make sure ALL general regs not disturbed
1009
        test_gr_a5a5 1
1010
        test_gr_a5a5 2
1011
        test_gr_a5a5 3
1012
        test_gr_a5a5 4
1013
        test_gr_a5a5 5
1014
        test_gr_a5a5 6
1015
        test_gr_a5a5 7
1016
 
1017
.endif                          ; h8sx
1018
.endif                          ; h8/300
1019
 
1020
        pass
1021
 
1022
        exit 0

powered by: WebSVN 2.1.0

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