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 33byte_dest: .byte 0xa5 34 .align 2 35word_dest: .word 0xa5a5 36 .align 4 37long_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 48neg_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) 78neg_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 106neg_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 135neg_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 164neg_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 193neg_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 222neg_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 251neg_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 281neg_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 311neg_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 339neg_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 373neg_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) 400neg_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 429neg_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 458neg_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 487neg_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 516neg_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 545neg_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 574neg_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 604neg_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 634neg_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 662neg_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 698neg_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) 725neg_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 754neg_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 783neg_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 812neg_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 841neg_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 870neg_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 899neg_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 929neg_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 959neg_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 988neg_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 1023