1# Hitachi H8 testcase 'exts.w, extu.w' 2# mach(): h8300h h8300s h8sx 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 .align 2 17pos: .word 0xff01 18neg: .word 0x0080 19 20 .text 21 22exts_w_reg16_p: 23 set_grs_a5a5 24 set_ccr_zero 25 ;; exts.w rn16 26 mov.b #1, r0l 27 exts.w r0 28 29 ;; Test ccr H=0 N=0 Z=0 V=0 C=0 30 test_cc_clear 31 32 test_h_gr32 0xa5a50001 er0 ; result of sign extend 33 test_gr_a5a5 1 ; Make sure other general regs not disturbed 34 test_gr_a5a5 2 35 test_gr_a5a5 3 36 test_gr_a5a5 4 37 test_gr_a5a5 5 38 test_gr_a5a5 6 39 test_gr_a5a5 7 40 41exts_w_reg16_n: 42 set_grs_a5a5 43 set_ccr_zero 44 ;; exts.w rn16 45 mov.b #0xff, r0l 46 exts.w r0 47 48 ;; Test ccr H=0 N=1 Z=0 V=0 C=0 49 test_neg_set 50 test_zero_clear 51 test_ovf_clear 52 test_carry_clear 53 54 test_h_gr32 0xa5a5ffff er0 ; result of sign extend 55 test_gr_a5a5 1 ; Make sure other general regs not disturbed 56 test_gr_a5a5 2 57 test_gr_a5a5 3 58 test_gr_a5a5 4 59 test_gr_a5a5 5 60 test_gr_a5a5 6 61 test_gr_a5a5 7 62 63extu_w_reg16_n: 64 set_grs_a5a5 65 set_ccr_zero 66 ;; extu.w rn16 67 mov.b #0xff, r0l 68 extu.w r0 69 70 ;; Test ccr H=0 N=0 Z=0 V=0 C=0 71 test_cc_clear 72 73 test_h_gr32 0xa5a500ff er0 ; result of zero extend 74 test_gr_a5a5 1 ; Make sure other general regs not disturbed 75 test_gr_a5a5 2 76 test_gr_a5a5 3 77 test_gr_a5a5 4 78 test_gr_a5a5 5 79 test_gr_a5a5 6 80 test_gr_a5a5 7 81 82.if (sim_cpu == h8sx) 83exts_w_ind_p: 84 set_grs_a5a5 85 set_ccr_zero 86 ;; exts.w @ern 87 mov.l #pos, er1 88 exts.w @er1 89 90 ;; Test ccr H=0 N=0 Z=0 V=0 C=0 91 test_cc_clear 92 93 test_h_gr32 pos er1 ; er1 still contains target address 94 test_gr_a5a5 0 ; 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 cmp.w #0x0001, @pos 102 beq .Lswindp 103 fail 104.Lswindp: 105 mov.w #0xff01, @pos ; Restore initial value 106 107exts_w_ind_n: 108 set_grs_a5a5 109 set_ccr_zero 110 ;; exts.w @ern 111 mov.l #neg, er1 112 exts.w @er1 113 114 ;; Test ccr H=0 N=1 Z=0 V=0 C=0 115 test_neg_set 116 test_zero_clear 117 test_ovf_clear 118 test_carry_clear 119 120 test_h_gr32 neg er1 ; er1 still contains target address 121 test_gr_a5a5 0 ; Make sure other general regs not disturbed 122 test_gr_a5a5 2 123 test_gr_a5a5 3 124 test_gr_a5a5 4 125 test_gr_a5a5 5 126 test_gr_a5a5 6 127 test_gr_a5a5 7 128 cmp.w #0xff80, @neg 129 beq .Lswindn 130 fail 131.Lswindn: 132 ;; Note: leave the value as 0xff80, so that extu has work to do. 133 134extu_w_ind_n: 135 set_grs_a5a5 136 set_ccr_zero 137 ;; extu.w @ern 138 mov.l #neg, er1 139 extu.w @er1 140 141 ;; Test ccr H=0 N=0 Z=0 V=0 C=0 142 test_cc_clear 143 144 test_h_gr32 neg er1 ; er1 still contains target address 145 test_gr_a5a5 0 ; Make sure other general regs not disturbed 146 test_gr_a5a5 2 147 test_gr_a5a5 3 148 test_gr_a5a5 4 149 test_gr_a5a5 5 150 test_gr_a5a5 6 151 test_gr_a5a5 7 152 cmp.w #0x0080, @neg 153 beq .Luwindn 154 fail 155.Luwindn: 156 ;; Note: leave the value as 0x0080, like it started out. 157 158exts_w_postinc_p: 159 set_grs_a5a5 160 set_ccr_zero 161 ;; exts.w @ern+ 162 mov.l #pos, er1 163 exts.w @er1+ 164 165 ;; Test ccr H=0 N=0 Z=0 V=0 C=0 166 test_cc_clear 167 168 test_h_gr32 pos+2 er1 ; er1 still contains target address plus 2 169 test_gr_a5a5 0 ; Make sure other general regs not disturbed 170 test_gr_a5a5 2 171 test_gr_a5a5 3 172 test_gr_a5a5 4 173 test_gr_a5a5 5 174 test_gr_a5a5 6 175 test_gr_a5a5 7 176 cmp.w #0x0001, @pos 177 beq .Lswpostincp 178 fail 179.Lswpostincp: 180 mov.w #0xff01, @pos ; Restore initial value 181 182exts_w_postinc_n: 183 set_grs_a5a5 184 set_ccr_zero 185 ;; exts.w @ern+ 186 mov.l #neg, er1 187 exts.w @er1+ 188 189 ;; Test ccr H=0 N=1 Z=0 V=0 C=0 190 test_neg_set 191 test_zero_clear 192 test_ovf_clear 193 test_carry_clear 194 195 test_h_gr32 neg+2 er1 ; er1 still contains target address 196 test_gr_a5a5 0 ; Make sure other general regs not disturbed 197 test_gr_a5a5 2 198 test_gr_a5a5 3 199 test_gr_a5a5 4 200 test_gr_a5a5 5 201 test_gr_a5a5 6 202 test_gr_a5a5 7 203 cmp.w #0xff80, @neg 204 beq .Lswpostincn 205 fail 206.Lswpostincn: 207 ;; Note: leave the value as 0xff80, so that extu has work to do. 208 209extu_w_postinc_n: 210 set_grs_a5a5 211 set_ccr_zero 212 ;; extu.w @ern+ 213 mov.l #neg, er1 214 extu.w @er1+ 215 216 ;; Test ccr H=0 N=0 Z=0 V=0 C=0 217 test_cc_clear 218 219 test_h_gr32 neg+2 er1 ; er1 still contains target address 220 test_gr_a5a5 0 ; Make sure other general regs not disturbed 221 test_gr_a5a5 2 222 test_gr_a5a5 3 223 test_gr_a5a5 4 224 test_gr_a5a5 5 225 test_gr_a5a5 6 226 test_gr_a5a5 7 227 cmp.w #0x0080, @neg 228 beq .Luwpostincn 229 fail 230.Luwpostincn: 231 ;; Note: leave the value as 0x0080, like it started out. 232 233exts_w_postdec_p: 234 set_grs_a5a5 235 set_ccr_zero 236 ;; exts.w @ern- 237 mov.l #pos, er1 238 exts.w @er1- 239 240 ;; Test ccr H=0 N=0 Z=0 V=0 C=0 241 test_cc_clear 242 243 test_h_gr32 pos-2 er1 ; er1 still contains target address plus 2 244 test_gr_a5a5 0 ; Make sure other general regs not disturbed 245 test_gr_a5a5 2 246 test_gr_a5a5 3 247 test_gr_a5a5 4 248 test_gr_a5a5 5 249 test_gr_a5a5 6 250 test_gr_a5a5 7 251 cmp.w #0x0001, @pos 252 beq .Lswpostdecp 253 fail 254.Lswpostdecp: 255 mov.w #0xff01, @pos ; Restore initial value 256 257exts_w_postdec_n: 258 set_grs_a5a5 259 set_ccr_zero 260 ;; exts.w @ern- 261 mov.l #neg, er1 262 exts.w @er1- 263 264 ;; Test ccr H=0 N=1 Z=0 V=0 C=0 265 test_neg_set 266 test_zero_clear 267 test_ovf_clear 268 test_carry_clear 269 270 test_h_gr32 neg-2 er1 ; er1 still contains target address 271 test_gr_a5a5 0 ; Make sure other general regs not disturbed 272 test_gr_a5a5 2 273 test_gr_a5a5 3 274 test_gr_a5a5 4 275 test_gr_a5a5 5 276 test_gr_a5a5 6 277 test_gr_a5a5 7 278 cmp.w #0xff80, @neg 279 beq .Lswpostdecn 280 fail 281.Lswpostdecn: 282 ;; Note: leave the value as 0xff80, so that extu has work to do. 283 284extu_w_postdec_n: 285 set_grs_a5a5 286 set_ccr_zero 287 ;; extu.w @ern- 288 mov.l #neg, er1 289 extu.w @er1- 290 291 ;; Test ccr H=0 N=0 Z=0 V=0 C=0 292 test_cc_clear 293 294 test_h_gr32 neg-2 er1 ; er1 still contains target address 295 test_gr_a5a5 0 ; Make sure other general regs not disturbed 296 test_gr_a5a5 2 297 test_gr_a5a5 3 298 test_gr_a5a5 4 299 test_gr_a5a5 5 300 test_gr_a5a5 6 301 test_gr_a5a5 7 302 cmp.w #0x0080, @neg 303 beq .Luwpostdecn 304 fail 305.Luwpostdecn: 306 ;; Note: leave the value as 0x0080, like it started out. 307 308exts_w_preinc_p: 309 set_grs_a5a5 310 set_ccr_zero 311 ;; exts.w @+ern 312 mov.l #pos-2, er1 313 exts.w @+er1 314 315 ;; Test ccr H=0 N=0 Z=0 V=0 C=0 316 test_cc_clear 317 318 test_h_gr32 pos er1 ; er1 still contains target address plus 2 319 test_gr_a5a5 0 ; Make sure other general regs not disturbed 320 test_gr_a5a5 2 321 test_gr_a5a5 3 322 test_gr_a5a5 4 323 test_gr_a5a5 5 324 test_gr_a5a5 6 325 test_gr_a5a5 7 326 cmp.w #0x0001, @pos 327 beq .Lswpreincp 328 fail 329.Lswpreincp: 330 mov.w #0xff01, @pos ; Restore initial value 331 332exts_w_preinc_n: 333 set_grs_a5a5 334 set_ccr_zero 335 ;; exts.w @+ern 336 mov.l #neg-2, er1 337 exts.w @+er1 338 339 ;; Test ccr H=0 N=1 Z=0 V=0 C=0 340 test_neg_set 341 test_zero_clear 342 test_ovf_clear 343 test_carry_clear 344 345 test_h_gr32 neg er1 ; er1 still contains target address 346 test_gr_a5a5 0 ; Make sure other general regs not disturbed 347 test_gr_a5a5 2 348 test_gr_a5a5 3 349 test_gr_a5a5 4 350 test_gr_a5a5 5 351 test_gr_a5a5 6 352 test_gr_a5a5 7 353 cmp.w #0xff80, @neg 354 beq .Lswpreincn 355 fail 356.Lswpreincn: 357 ;; Note: leave the value as 0xff80, so that extu has work to do. 358 359extu_w_preinc_n: 360 set_grs_a5a5 361 set_ccr_zero 362 ;; extu.w @+ern 363 mov.l #neg-2, er1 364 extu.w @+er1 365 366 ;; Test ccr H=0 N=0 Z=0 V=0 C=0 367 test_cc_clear 368 369 test_h_gr32 neg er1 ; er1 still contains target address 370 test_gr_a5a5 0 ; Make sure other general regs not disturbed 371 test_gr_a5a5 2 372 test_gr_a5a5 3 373 test_gr_a5a5 4 374 test_gr_a5a5 5 375 test_gr_a5a5 6 376 test_gr_a5a5 7 377 cmp.w #0x0080, @neg 378 beq .Luwpreincn 379 fail 380.Luwpreincn: 381 ;; Note: leave the value as 0x0080, like it started out. 382 383exts_w_predec_p: 384 set_grs_a5a5 385 set_ccr_zero 386 ;; exts.w @-ern 387 mov.l #pos+2, er1 388 exts.w @-er1 389 390 ;; Test ccr H=0 N=0 Z=0 V=0 C=0 391 test_cc_clear 392 393 test_h_gr32 pos er1 ; er1 still contains target address plus 2 394 test_gr_a5a5 0 ; Make sure other general regs not disturbed 395 test_gr_a5a5 2 396 test_gr_a5a5 3 397 test_gr_a5a5 4 398 test_gr_a5a5 5 399 test_gr_a5a5 6 400 test_gr_a5a5 7 401 cmp.w #0x0001, @pos 402 beq .Lswpredecp 403 fail 404.Lswpredecp: 405 mov.w #0xff01, @pos ; Restore initial value 406 407exts_w_predec_n: 408 set_grs_a5a5 409 set_ccr_zero 410 ;; exts.w @-ern 411 mov.l #neg+2, er1 412 exts.w @-er1 413 414 ;; Test ccr H=0 N=1 Z=0 V=0 C=0 415 test_neg_set 416 test_zero_clear 417 test_ovf_clear 418 test_carry_clear 419 420 test_h_gr32 neg er1 ; er1 still contains target 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 cmp.w #0xff80, @neg 429 beq .Lswpredecn 430 fail 431.Lswpredecn: 432 ;; Note: leave the value as 0xff80, so that extu has work to do. 433 434extu_w_predec_n: 435 set_grs_a5a5 436 set_ccr_zero 437 ;; extu.w @-ern 438 mov.l #neg+2, er1 439 extu.w @-er1 440 441 ;; Test ccr H=0 N=0 Z=0 V=0 C=0 442 test_cc_clear 443 444 test_h_gr32 neg er1 ; er1 still contains target address 445 test_gr_a5a5 0 ; Make sure other general regs not disturbed 446 test_gr_a5a5 2 447 test_gr_a5a5 3 448 test_gr_a5a5 4 449 test_gr_a5a5 5 450 test_gr_a5a5 6 451 test_gr_a5a5 7 452 cmp.w #0x0080, @neg 453 beq .Luwpredecn 454 fail 455.Luwpredecn: 456 ;; Note: leave the value as 0x0080, like it started out. 457 458extu_w_disp2_n: 459 set_grs_a5a5 460 set_ccr_zero 461 ;; extu.w @(dd:2, ern) 462 mov.l #neg-2, er1 463 extu.w @(2:2, er1) 464 465 ;; Test ccr H=0 N=0 Z=0 V=0 C=0 466 test_cc_clear 467 468 test_h_gr32 neg-2 er1 ; er1 still contains target address 469 test_gr_a5a5 0 ; Make sure other general regs not disturbed 470 test_gr_a5a5 2 471 test_gr_a5a5 3 472 test_gr_a5a5 4 473 test_gr_a5a5 5 474 test_gr_a5a5 6 475 test_gr_a5a5 7 476 cmp.w #0x0080, @neg 477 beq .Luwdisp2n 478 fail 479.Luwdisp2n: 480 ;; Note: leave the value as 0x0080, like it started out. 481 482extu_w_disp16_n: 483 set_grs_a5a5 484 set_ccr_zero 485 ;; extu.w @(dd:16, ern) 486 mov.l #neg-44, er1 487 extu.w @(44:16, er1) 488 489 ;; Test ccr H=0 N=0 Z=0 V=0 C=0 490 test_cc_clear 491 492 test_h_gr32 neg-44 er1 ; er1 still contains target address 493 test_gr_a5a5 0 ; Make sure other general regs not disturbed 494 test_gr_a5a5 2 495 test_gr_a5a5 3 496 test_gr_a5a5 4 497 test_gr_a5a5 5 498 test_gr_a5a5 6 499 test_gr_a5a5 7 500 cmp.w #0x0080, @neg 501 beq .Luwdisp16n 502 fail 503.Luwdisp16n: 504 ;; Note: leave the value as 0x0080, like it started out. 505 506extu_w_disp32_n: 507 set_grs_a5a5 508 set_ccr_zero 509 ;; extu.w @(dd:32, ern) 510 mov.l #neg+444, er1 511 extu.w @(-444:32, er1) 512 513 ;; Test ccr H=0 N=0 Z=0 V=0 C=0 514 test_cc_clear 515 516 test_h_gr32 neg+444 er1 ; er1 still contains target address 517 test_gr_a5a5 0 ; Make sure other general regs not disturbed 518 test_gr_a5a5 2 519 test_gr_a5a5 3 520 test_gr_a5a5 4 521 test_gr_a5a5 5 522 test_gr_a5a5 6 523 test_gr_a5a5 7 524 cmp.w #0x0080, @neg 525 beq .Luwdisp32n 526 fail 527.Luwdisp32n: 528 ;; Note: leave the value as 0x0080, like it started out. 529 530extu_w_abs16_n: 531 set_grs_a5a5 532 set_ccr_zero 533 ;; extu.w @aa:16 534 extu.w @neg:16 535 536 ;; Test ccr H=0 N=0 Z=0 V=0 C=0 537 test_cc_clear 538 539 test_gr_a5a5 0 ; Make sure other general regs not disturbed 540 test_gr_a5a5 1 541 test_gr_a5a5 2 542 test_gr_a5a5 3 543 test_gr_a5a5 4 544 test_gr_a5a5 5 545 test_gr_a5a5 6 546 test_gr_a5a5 7 547 cmp.w #0x0080, @neg 548 beq .Luwabs16n 549 fail 550.Luwabs16n: 551 ;; Note: leave the value as 0x0080, like it started out. 552 553extu_w_abs32_n: 554 set_grs_a5a5 555 set_ccr_zero 556 ;; extu.w @aa:32 557 extu.w @neg:32 558 559 ;; Test ccr H=0 N=0 Z=0 V=0 C=0 560 test_cc_clear 561 562 test_gr_a5a5 0 ; Make sure other general regs not disturbed 563 test_gr_a5a5 1 564 test_gr_a5a5 2 565 test_gr_a5a5 3 566 test_gr_a5a5 4 567 test_gr_a5a5 5 568 test_gr_a5a5 6 569 test_gr_a5a5 7 570 cmp.w #0x0080, @neg 571 beq .Luwabs32n 572 fail 573.Luwabs32n: 574 ;; Note: leave the value as 0x0080, like it started out. 575 576.endif 577 578 pass 579 580 exit 0 581