]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - sim/testsuite/sim/h8300/neg.s
This commit was manufactured by cvs2svn to create branch 'gdb_7_0-branch'.
[thirdparty/binutils-gdb.git] / sim / testsuite / sim / h8300 / neg.s
1 # 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