Home | History | Annotate | Line # | Download | only in h8300
andb.s revision 1.1
      1 # Hitachi H8 testcase 'and.b'
      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 	# and.b #xx:8, rd	;                     e rd   xxxxxxxx
     15 	# and.b #xx:8, @erd	;         7 d rd ???? e ???? xxxxxxxx
     16 	# and.b #xx:8, @erd+	; 0 1 7 4 6 c rd 1??? e ???? xxxxxxxx
     17 	# and.b #xx:8, @erd-	; 0 1 7 6 6 c rd 1??? e ???? xxxxxxxx
     18 	# and.b #xx:8, @+erd	; 0 1 7 5 6 c rd 1??? e ???? xxxxxxxx
     19 	# and.b #xx:8, @-erd	; 0 1 7 7 6 c rd 1??? e ???? xxxxxxxx
     20 	# and.b rs, rd		;                     1 6 rs rd
     21 	# and.b reg8, @erd	;         7 d rd ???? 1 6 rs ????
     22 	# and.b reg8, @erd+	;         0 1 7     9 8 rd 6 rs
     23 	# and.b reg8, @erd-	;         0 1 7     9 a rd 6 rs
     24 	# and.b reg8, @+erd	;         0 1 7     9 9 rd 6 rs
     25 	# and.b reg8, @-erd	;         0 1 7     9 b rd 6 rs
     26 	#
     27 	# andc #xx:8, ccr	;         0 6 xxxxxxxx
     28 	# andc #xx:8, exr	; 0 1 4 1 0 6 xxxxxxxx
     29 
     30 	# Coming soon:
     31 	# ...
     32 
     33 .data
     34 pre_byte:	.byte 0
     35 byte_dest:	.byte 0xa5
     36 post_byte:	.byte 0
     37 
     38 	start
     39 
     40 and_b_imm8_reg8:
     41 	set_grs_a5a5		; Fill all general regs with a fixed pattern
     42 	;;  fixme set ccr
     43 
     44 	;;  and.b #xx:8,Rd
     45 	and.b	#0xaa, r0l	; Immediate 8-bit operand
     46 
     47 	;; fixme test ccr	; H=0 N=1 Z=0 V=0 C=0
     48 	test_h_gr16 0xa5a0 r0	; and result:	a5 & aa
     49 .if (sim_cpu)			; non-zero means h8300h, s, or sx
     50 	test_h_gr32 0xa5a5a5a0 er0	; and result:	 a5 & aa
     51 .endif
     52 	test_gr_a5a5 1		; Make sure other general regs not disturbed
     53 	test_gr_a5a5 2
     54 	test_gr_a5a5 3
     55 	test_gr_a5a5 4
     56 	test_gr_a5a5 5
     57 	test_gr_a5a5 6
     58 	test_gr_a5a5 7
     59 
     60 .if (sim_cpu == h8sx)
     61 and_b_imm8_rdind:
     62 	set_grs_a5a5		; Fill all general regs with a fixed pattern
     63 	set_ccr_zero
     64 
     65 	;;  and.b #xx:8,@eRd
     66 	mov	#byte_dest, er0
     67 	and.b	#0xaa:8, @er0	; Immediate 8-bit src, reg indirect dst
     68 ;;; 	.word	0x7d00
     69 ;;; 	.word	0xe0aa
     70 
     71 	test_carry_clear	; H=0 N=1 Z=0 V=0 C=0
     72 	test_ovf_clear
     73 	test_zero_clear
     74 	test_neg_set
     75 
     76 	test_h_gr32 byte_dest, er0	; er0 still contains address
     77 	test_gr_a5a5 1		; Make sure other general regs not disturbed
     78 	test_gr_a5a5 2
     79 	test_gr_a5a5 3
     80 	test_gr_a5a5 4
     81 	test_gr_a5a5 5
     82 	test_gr_a5a5 6
     83 	test_gr_a5a5 7
     84 
     85 	;; Now check the result of the and to memory.
     86 	sub.b	r0l, r0l
     87 	mov.b	@byte_dest, r0l
     88 	cmp.b	#0xa0, r0l
     89 	beq	.L1
     90 	fail
     91 .L1:
     92 
     93 and_b_imm8_rdpostinc:
     94 	mov	#byte_dest, er0
     95 	mov.b	#0xa5, r1l
     96 	mov.b	r1l, @er0
     97 
     98 	set_grs_a5a5		; Fill all general regs with a fixed pattern
     99 	set_ccr_zero
    100 
    101 	;;  and.b #xx:8,@eRd+
    102 	mov	#byte_dest, er0
    103 	and.b	#0x55:8, @er0+	; Immediate 8-bit src, reg post-incr dest
    104 ;;; 	.word	0x0174
    105 ;;; 	.word	0x6c08
    106 ;;; 	.word	0xe055
    107 
    108 	test_carry_clear	; H=0 N=0 Z=0 V=0 C=0
    109 	test_ovf_clear
    110 	test_zero_clear
    111 	test_neg_clear
    112 
    113 	test_h_gr32 post_byte, er0	; er0 contains address plus one
    114 	test_gr_a5a5 1		; Make sure other general regs not disturbed
    115 	test_gr_a5a5 2
    116 	test_gr_a5a5 3
    117 	test_gr_a5a5 4
    118 	test_gr_a5a5 5
    119 	test_gr_a5a5 6
    120 	test_gr_a5a5 7
    121 
    122 	;; Now check the result of the and to memory.
    123 	sub.b	r0l, r0l
    124 	mov.b	@byte_dest, r0l
    125 	cmp.b	#0x05, r0l
    126 	beq	.L2
    127 	fail
    128 .L2:
    129 	;; special case same register
    130 	mov.l	#byte_dest, er0
    131 	mov.b	@er0, r1h
    132 	mov.b	r0l, r1l
    133 	and.b	r0l, @er0+
    134 	inc.b	r1l
    135 	and.b	r1h, r1l
    136 	mov.b	@byte_dest, r0l
    137 	cmp.b	r1l, r0l
    138 	beq	.L22
    139 	fail
    140 .L22:
    141 
    142 and_b_imm8_rdpostdec:
    143 	mov	#byte_dest, er0
    144 	mov.b	#0xa5, r1l
    145 	mov.b	r1l, @er0
    146 
    147 	set_grs_a5a5		; Fill all general regs with a fixed pattern
    148 	set_ccr_zero
    149 
    150 	;;  and.b #xx:8,@eRd-
    151 	mov	#byte_dest, er0
    152 	and.b	#0xaa:8, @er0-	; Immediate 8-bit src, reg post-decr dest
    153 ;;; 	.word	0x0176
    154 ;;; 	.word	0x6c08
    155 ;;; 	.word	0xe0aa
    156 
    157 	test_carry_clear	; H=0 N=1 Z=0 V=0 C=0
    158 	test_ovf_clear
    159 	test_zero_clear
    160 	test_neg_set
    161 
    162 	test_h_gr32 pre_byte, er0	; er0 contains address minus one
    163 	test_gr_a5a5 1		; Make sure other general regs not disturbed
    164 	test_gr_a5a5 2
    165 	test_gr_a5a5 3
    166 	test_gr_a5a5 4
    167 	test_gr_a5a5 5
    168 	test_gr_a5a5 6
    169 	test_gr_a5a5 7
    170 
    171 	;; Now check the result of the and to memory.
    172 	sub.b	r0l, r0l
    173 	mov.b	@byte_dest, r0l
    174 	cmp.b	#0xa0, r0l
    175 	beq	.L3
    176 	fail
    177 .L3:
    178 	;; special case same register
    179 	mov.l	#byte_dest, er0
    180 	mov.b	@er0, r1h
    181 	mov.b	r0l, r1l
    182 	and.b	r0l, @er0-
    183 	dec.b	r1l
    184 	and.b	r1h, r1l
    185 	mov.b	@byte_dest, r0l
    186 	cmp.b	r1l, r0l
    187 	beq	.L23
    188 	fail
    189 .L23:
    190 
    191 and_b_imm8_rdpreinc:
    192 	mov	#byte_dest, er0
    193 	mov.b	#0xa5, r1l
    194 	mov.b	r1l, @er0
    195 
    196 	set_grs_a5a5		; Fill all general regs with a fixed pattern
    197 	set_ccr_zero
    198 
    199 	;;  and.b #xx:8,@+eRd
    200 	mov	#pre_byte, er0
    201 	and.b	#0x55:8, @+er0	; Immediate 8-bit src, reg pre-incr dest
    202 ;;; 	.word	0x0175
    203 ;;; 	.word	0x6c08
    204 ;;; 	.word	0xe055
    205 
    206 	test_carry_clear	; H=0 N=0 Z=0 V=0 C=0
    207 	test_ovf_clear
    208 	test_zero_clear
    209 	test_neg_clear
    210 
    211 	test_h_gr32 byte_dest, er0	; er0 contains destination address
    212 	test_gr_a5a5 1		; Make sure other general regs not disturbed
    213 	test_gr_a5a5 2
    214 	test_gr_a5a5 3
    215 	test_gr_a5a5 4
    216 	test_gr_a5a5 5
    217 	test_gr_a5a5 6
    218 	test_gr_a5a5 7
    219 
    220 	;; Now check the result of the and to memory.
    221 	sub.b	r0l, r0l
    222 	mov.b	@byte_dest, r0l
    223 	cmp.b	#0x05, r0l
    224 	beq	.L4
    225 	fail
    226 .L4:
    227 	;; special case same register
    228 	mov.l	#pre_byte, er0
    229 	mov.b	@byte_dest, r1h
    230 	mov.b	r0l, r1l
    231 	and.b	r0l, @+er0
    232 	inc.b	r1l
    233 	and.b	r1h, r1l
    234 	mov.b	@byte_dest, r0l
    235 	cmp.b	r1l, r0l
    236 	beq	.L24
    237 	fail
    238 .L24:
    239 
    240 and_b_imm8_rdpredec:
    241 	mov	#byte_dest, er0
    242 	mov.b	#0xa5, r1l
    243 	mov.b	r1l, @er0
    244 
    245 	set_grs_a5a5		; Fill all general regs with a fixed pattern
    246 	set_ccr_zero
    247 
    248 	;;  and.b #xx:8,@-eRd
    249 	mov	#post_byte, er0
    250 	and.b	#0xaa:8, @-er0	; Immediate 8-bit src, reg pre-decr dest
    251 ;;; 	.word	0x0177
    252 ;;; 	.word	0x6c08
    253 ;;; 	.word	0xe0aa
    254 
    255 	test_carry_clear	; H=0 N=1 Z=0 V=0 C=0
    256 	test_ovf_clear
    257 	test_zero_clear
    258 	test_neg_set
    259 
    260 	test_h_gr32 byte_dest, er0	; er0 contains destination address
    261 	test_gr_a5a5 1		; Make sure other general regs not disturbed
    262 	test_gr_a5a5 2
    263 	test_gr_a5a5 3
    264 	test_gr_a5a5 4
    265 	test_gr_a5a5 5
    266 	test_gr_a5a5 6
    267 	test_gr_a5a5 7
    268 
    269 	;; Now check the result of the and to memory.
    270 	sub.b	r0l, r0l
    271 	mov.b	@byte_dest, r0l
    272 	cmp.b	#0xa0, r0l
    273 	beq	.L5
    274 	fail
    275 .L5:
    276 	;; special case same register
    277 	mov.l	#post_byte, er0
    278 	mov.b	@byte_dest, r1h
    279 	mov.b	r0l, r1l
    280 	and.b	r0l, @-er0
    281 	dec.b	r1l
    282 	and.b	r1h, r1l
    283 	mov.b	@byte_dest, r0l
    284 	cmp.b	r1l, r0l
    285 	beq	.L25
    286 	fail
    287 .L25:
    288 
    289 .endif				; h8sx
    290 
    291 and_b_reg8_reg8:
    292 	set_grs_a5a5		; Fill all general regs with a fixed pattern
    293 	;;  fixme set ccr
    294 
    295 	;;  and.b Rs,Rd
    296 	mov.b	#0xaa, r0h
    297 	and.b	r0h, r0l	; Register operand
    298 
    299 	;; fixme test ccr	; H=0 N=1 Z=0 V=0 C=0
    300 	test_h_gr16 0xaaa0 r0	; and result:	a5 & aa
    301 .if (sim_cpu)			; non-zero means h8300h, s, or sx
    302 	test_h_gr32 0xa5a5aaa0 er0	; and result:	a5 & aa
    303 .endif
    304 	test_gr_a5a5 1		; Make sure other general regs not disturbed
    305 	test_gr_a5a5 2
    306 	test_gr_a5a5 3
    307 	test_gr_a5a5 4
    308 	test_gr_a5a5 5
    309 	test_gr_a5a5 6
    310 	test_gr_a5a5 7
    311 
    312 .if (sim_cpu == h8sx)
    313 and_b_reg8_rdind:
    314 	mov	#byte_dest, er0
    315 	mov.b	#0xa5, r1l
    316 	mov.b	r1l, @er0
    317 
    318 	set_grs_a5a5		; Fill all general regs with a fixed pattern
    319 	set_ccr_zero
    320 
    321 	;;  and.b rs8,@eRd	; And to register indirect
    322 	mov	#byte_dest, er0
    323 	mov	#0x55, r1l
    324 	and.b	r1l, @er0	; reg8 src, reg indirect dest
    325 ;;; 	.word	0x7d00
    326 ;;; 	.word	0x1690
    327 
    328 	test_carry_clear	; H=0 N=0 Z=0 V=0 C=0
    329 	test_ovf_clear
    330 	test_zero_clear
    331 	test_neg_clear
    332 
    333 	test_h_gr32 byte_dest er0	; er0 still contains address
    334 	test_h_gr32 0xa5a5a555 er1	; er1 has the test load
    335 
    336 	test_gr_a5a5 2		; Make sure other general regs not disturbed
    337 	test_gr_a5a5 3
    338 	test_gr_a5a5 4
    339 	test_gr_a5a5 5
    340 	test_gr_a5a5 6
    341 	test_gr_a5a5 7
    342 
    343 	;; Now check the result of the and to memory.
    344 	sub.b	r0l, r0l
    345 	mov.b	@byte_dest, r0l
    346 	cmp.b	#0x05, r0l
    347 	beq	.L6
    348 	fail
    349 .L6:
    350 
    351 and_b_reg8_rdpostinc:
    352 	mov	#byte_dest, er0
    353 	mov.b	#0xa5, r1l
    354 	mov.b	r1l, @er0
    355 
    356 	set_grs_a5a5		; Fill all general regs with a fixed pattern
    357 	set_ccr_zero
    358 
    359 	;;  and.b rs8,@eRd+	; And to register post-incr
    360 	mov	#byte_dest, er0
    361 	mov	#0xaa, r1l
    362 	and.b	r1l, @er0+	; reg8 src, reg post-incr dest
    363 ;;; 	.word	0x0179
    364 ;;; 	.word	0x8069
    365 
    366 	test_carry_clear	; H=0 N=1 Z=0 V=0 C=0
    367 	test_ovf_clear
    368 	test_zero_clear
    369 	test_neg_set
    370 
    371 	test_h_gr32 post_byte er0	; er0 contains address plus one
    372 	test_h_gr32 0xa5a5a5aa er1	; er1 has the test load
    373 
    374 	test_gr_a5a5 2		; Make sure other general regs not disturbed
    375 	test_gr_a5a5 3
    376 	test_gr_a5a5 4
    377 	test_gr_a5a5 5
    378 	test_gr_a5a5 6
    379 	test_gr_a5a5 7
    380 
    381 	;; Now check the result of the and to memory.
    382 	sub.b	r0l, r0l
    383 	mov.b	@byte_dest, r0l
    384 	cmp.b	#0xa0, r0l
    385 	beq	.L7
    386 	fail
    387 .L7:
    388 
    389 and_b_reg8_rdpostdec:
    390 	mov	#byte_dest, er0
    391 	mov.b	#0xa5, r1l
    392 	mov.b	r1l, @er0
    393 
    394 	set_grs_a5a5		; Fill all general regs with a fixed pattern
    395 	set_ccr_zero
    396 
    397 	;;  and.b rs8,@eRd-	; And to register post-decr
    398 	mov	#byte_dest, er0
    399 	mov	#0x55, r1l
    400 	and.b	r1l, @er0-	; reg8 src, reg post-decr dest
    401 ;;; 	.word	0x0179
    402 ;;; 	.word	0xa069
    403 
    404 	test_carry_clear	; H=0 N=0 Z=0 V=0 C=0
    405 	test_ovf_clear
    406 	test_zero_clear
    407 	test_neg_clear
    408 
    409 	test_h_gr32 pre_byte er0	; er0 contains address minus one
    410 	test_h_gr32 0xa5a5a555 er1	; er1 has the test load
    411 
    412 	test_gr_a5a5 2		; Make sure other general regs not disturbed
    413 	test_gr_a5a5 3
    414 	test_gr_a5a5 4
    415 	test_gr_a5a5 5
    416 	test_gr_a5a5 6
    417 	test_gr_a5a5 7
    418 
    419 	;; Now check the result of the and to memory.
    420 	sub.b	r0l, r0l
    421 	mov.b	@byte_dest, r0l
    422 	cmp.b	#0x05, r0l
    423 	beq	.L8
    424 	fail
    425 .L8:
    426 
    427 and_b_reg8_rdpreinc:
    428 	mov	#byte_dest, er0
    429 	mov.b	#0xa5, r1l
    430 	mov.b	r1l, @er0
    431 
    432 	set_grs_a5a5		; Fill all general regs with a fixed pattern
    433 	set_ccr_zero
    434 
    435 	;;  and.b rs8,@+eRd	; And to register post-incr
    436 	mov	#pre_byte, er0
    437 	mov	#0xaa, r1l
    438 	and.b	r1l, @+er0	; reg8 src, reg post-incr dest
    439 ;;; 	.word	0x0179
    440 ;;; 	.word	0x9069
    441 
    442 	test_carry_clear	; H=0 N=1 Z=0 V=0 C=0
    443 	test_ovf_clear
    444 	test_zero_clear
    445 	test_neg_set
    446 
    447 	test_h_gr32 byte_dest er0	; er0 contains destination address
    448 	test_h_gr32 0xa5a5a5aa er1	; er1 has the test load
    449 
    450 	test_gr_a5a5 2		; Make sure other general regs not disturbed
    451 	test_gr_a5a5 3
    452 	test_gr_a5a5 4
    453 	test_gr_a5a5 5
    454 	test_gr_a5a5 6
    455 	test_gr_a5a5 7
    456 
    457 	;; Now check the result of the and to memory.
    458 	sub.b	r0l, r0l
    459 	mov.b	@byte_dest, r0l
    460 	cmp.b	#0xa0, r0l
    461 	beq	.L9
    462 	fail
    463 .L9:
    464 
    465 and_b_reg8_rdpredec:
    466 	mov	#byte_dest, er0
    467 	mov.b	#0xa5, r1l
    468 	mov.b	r1l, @er0
    469 
    470 	set_grs_a5a5		; Fill all general regs with a fixed pattern
    471 	set_ccr_zero
    472 
    473 	;;  and.b rs8,@-eRd	; And to register post-decr
    474 	mov	#post_byte, er0
    475 	mov	#0x55, r1l
    476 	and.b	r1l, @-er0	; reg8 src, reg post-decr dest
    477 ;;; 	.word	0x0179
    478 ;;; 	.word	0xb069
    479 
    480 	test_carry_clear	; H=0 N=0 Z=0 V=0 C=0
    481 	test_ovf_clear
    482 	test_zero_clear
    483 	test_neg_clear
    484 
    485 	test_h_gr32 byte_dest er0	; er0 contains destination address
    486 	test_h_gr32 0xa5a5a555 er1	; er1 has the test load
    487 
    488 	test_gr_a5a5 2		; Make sure other general regs not disturbed
    489 	test_gr_a5a5 3
    490 	test_gr_a5a5 4
    491 	test_gr_a5a5 5
    492 	test_gr_a5a5 6
    493 	test_gr_a5a5 7
    494 
    495 	;; Now check the result of the and to memory.
    496 	sub.b	r0l, r0l
    497 	mov.b	@byte_dest, r0l
    498 	cmp.b	#0x05, r0l
    499 	beq	.L10
    500 	fail
    501 .L10:
    502 .endif				; h8sx
    503 
    504 andc_imm8_ccr:
    505 	set_grs_a5a5		; Fill all general regs with a fixed pattern
    506 	set_ccr_zero
    507 
    508 	;;  andc #xx:8,ccr
    509 	set_ccr 0xff
    510 
    511 	test_neg_set
    512 	andc	#0xf7, ccr	; Immediate 8-bit operand (neg flag)
    513 	test_neg_clear
    514 
    515 	test_zero_set
    516 	andc	#0xfb, ccr	; Immediate 8-bit operand (zero flag)
    517 	test_zero_clear
    518 
    519 	test_ovf_set
    520 	andc	#0xfd, ccr	; Immediate 8-bit operand (overflow flag)
    521 	test_ovf_clear
    522 
    523 	test_carry_set
    524 	andc	#0xfe, ccr	; Immediate 8-bit operand (carry flag)
    525 	test_carry_clear
    526 
    527 	test_gr_a5a5 0		; Make sure other general regs not disturbed
    528 	test_gr_a5a5 1
    529 	test_gr_a5a5 2
    530 	test_gr_a5a5 3
    531 	test_gr_a5a5 4
    532 	test_gr_a5a5 5
    533 	test_gr_a5a5 6
    534 	test_gr_a5a5 7
    535 
    536 .if (sim_cpu == h8300s || sim_cpu == h8sx)	; Earlier versions, no exr
    537 andc_imm8_exr:
    538 	set_grs_a5a5		; Fill all general regs with a fixed pattern
    539 
    540 	ldc	#0xff, exr
    541 	stc	exr, r0l
    542 	test_h_gr8 0x87, r0l
    543 
    544 	;;  andc #xx:8,exr
    545 	set_ccr_zero
    546 	andc	#0x7f, exr
    547 	test_cc_clear
    548 	stc	exr, r0l
    549 	test_h_gr8 0x7, r0l
    550 
    551 	andc	#0x3, exr
    552 	stc	exr, r0l
    553 	test_h_gr8 0x3, r0l
    554 
    555 	andc	#0x1, exr
    556 	stc	exr, r0l
    557 	test_h_gr8 0x1, r0l
    558 
    559 	andc	#0x0, exr
    560 	stc	exr, r0l
    561 	test_h_gr8 0x0, r0l
    562 
    563 	test_h_gr32  0xa5a5a500 er0
    564 	test_gr_a5a5 1
    565 	test_gr_a5a5 2
    566 	test_gr_a5a5 3
    567 	test_gr_a5a5 4
    568 	test_gr_a5a5 5
    569 	test_gr_a5a5 6
    570 	test_gr_a5a5 7
    571 .endif				; not h8300 or h8300h
    572 
    573 	pass
    574 
    575 	exit 0
    576