Home | History | Annotate | Line # | Download | only in h8300
      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
   1023