1 1.1 christos # Hitachi H8 testcase 'mov.w' 2 1.1 christos # mach(): h8300h h8300s h8sx 3 1.1 christos # as(h8300h): --defsym sim_cpu=1 4 1.1 christos # as(h8300s): --defsym sim_cpu=2 5 1.1 christos # as(h8sx): --defsym sim_cpu=3 6 1.1 christos # ld(h8300h): -m h8300helf 7 1.1 christos # ld(h8300s): -m h8300self 8 1.1 christos # ld(h8sx): -m h8300sxelf 9 1.1 christos 10 1.1 christos .include "testutils.inc" 11 1.1 christos 12 1.1 christos start 13 1.1 christos 14 1.1 christos .data 15 1.1 christos .align 2 16 1.1 christos word_dst_dec: 17 1.1 christos .word 0 18 1.1 christos word_src: 19 1.1 christos .word 0x7777 20 1.1 christos word_dst: 21 1.1 christos .word 0 22 1.1 christos 23 1.1 christos .text 24 1.1 christos 25 1.1 christos ;; 26 1.1 christos ;; Move word from immediate source 27 1.1 christos ;; 28 1.1 christos 29 1.1 christos .if (sim_cpu == h8sx) 30 1.1 christos mov_w_imm3_to_reg16: 31 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 32 1.1 christos set_ccr_zero 33 1.1 christos 34 1.1 christos ;; mov.w #xx:3, rd 35 1.1 christos mov.w #0x3:3, r0 ; Immediate 3-bit operand 36 1.1 christos ;;; .word 0x0f30 37 1.1 christos 38 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 39 1.1 christos test_neg_clear 40 1.1 christos test_zero_clear 41 1.1 christos test_ovf_clear 42 1.1 christos test_carry_clear 43 1.1 christos 44 1.1 christos test_h_gr32 0xa5a50003 er0 45 1.1 christos 46 1.1 christos test_gr_a5a5 1 ; Make sure other general regs not disturbed 47 1.1 christos test_gr_a5a5 2 48 1.1 christos test_gr_a5a5 3 49 1.1 christos test_gr_a5a5 4 50 1.1 christos test_gr_a5a5 5 51 1.1 christos test_gr_a5a5 6 52 1.1 christos test_gr_a5a5 7 53 1.1 christos .endif 54 1.1 christos 55 1.1 christos mov_w_imm16_to_reg16: 56 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 57 1.1 christos set_ccr_zero 58 1.1 christos 59 1.1 christos ;; mov.w #xx:16, rd 60 1.1 christos mov.w #0x1234, r0 ; Immediate 16-bit operand 61 1.1 christos ;;; .word 0x7900 62 1.1 christos ;;; .word 0x1234 63 1.1 christos 64 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 65 1.1 christos test_neg_clear 66 1.1 christos test_zero_clear 67 1.1 christos test_ovf_clear 68 1.1 christos test_carry_clear 69 1.1 christos 70 1.1 christos test_h_gr32 0xa5a51234 er0 71 1.1 christos 72 1.1 christos test_gr_a5a5 1 ; Make sure other general regs not disturbed 73 1.1 christos test_gr_a5a5 2 74 1.1 christos test_gr_a5a5 3 75 1.1 christos test_gr_a5a5 4 76 1.1 christos test_gr_a5a5 5 77 1.1 christos test_gr_a5a5 6 78 1.1 christos test_gr_a5a5 7 79 1.1 christos 80 1.1 christos .if (sim_cpu == h8sx) 81 1.1 christos mov_w_imm4_to_abs16: 82 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 83 1.1 christos set_ccr_zero 84 1.1 christos 85 1.1 christos ;; mov.w #xx:4, @aa:16 86 1.1 christos mov.w #0xf:4, @word_dst:16 ; 4-bit imm to 16-bit address-direct 87 1.1 christos ;;; .word 0x6bdf 88 1.1 christos ;;; .word @word_dst 89 1.1 christos 90 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 91 1.1 christos test_neg_clear 92 1.1 christos test_zero_clear 93 1.1 christos test_ovf_clear 94 1.1 christos test_carry_clear 95 1.1 christos 96 1.1 christos test_gr_a5a5 0 ; Make sure _ALL_ general regs not disturbed 97 1.1 christos test_gr_a5a5 1 ; (first, because on h8/300 we must use one 98 1.1 christos test_gr_a5a5 2 ; to examine the destination memory). 99 1.1 christos test_gr_a5a5 3 100 1.1 christos test_gr_a5a5 4 101 1.1 christos test_gr_a5a5 5 102 1.1 christos test_gr_a5a5 6 103 1.1 christos test_gr_a5a5 7 104 1.1 christos 105 1.1 christos ;; Now check the result of the move to memory. 106 1.1 christos cmp.w #0xf, @word_dst 107 1.1 christos beq .Lnext21 108 1.1 christos fail 109 1.1 christos .Lnext21: 110 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 111 1.1 christos 112 1.1 christos mov_w_imm4_to_abs32: 113 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 114 1.1 christos set_ccr_zero 115 1.1 christos 116 1.1 christos ;; mov.w #xx:4, @aa:32 117 1.1 christos mov.w #0xf:4, @word_dst:32 ; 4-bit imm to 32-bit address-direct 118 1.1 christos ;;; .word 0x6bff 119 1.1 christos ;;; .long @word_dst 120 1.1 christos 121 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 122 1.1 christos test_neg_clear 123 1.1 christos test_zero_clear 124 1.1 christos test_ovf_clear 125 1.1 christos test_carry_clear 126 1.1 christos 127 1.1 christos test_gr_a5a5 0 ; Make sure _ALL_ general regs not disturbed 128 1.1 christos test_gr_a5a5 1 ; (first, because on h8/300 we must use one 129 1.1 christos test_gr_a5a5 2 ; to examine the destination memory). 130 1.1 christos test_gr_a5a5 3 131 1.1 christos test_gr_a5a5 4 132 1.1 christos test_gr_a5a5 5 133 1.1 christos test_gr_a5a5 6 134 1.1 christos test_gr_a5a5 7 135 1.1 christos 136 1.1 christos ;; Now check the result of the move to memory. 137 1.1 christos cmp.w #0xf, @word_dst 138 1.1 christos beq .Lnext22 139 1.1 christos fail 140 1.1 christos .Lnext22: 141 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 142 1.1 christos 143 1.1 christos mov_w_imm8_to_indirect: 144 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 145 1.1 christos set_ccr_zero 146 1.1 christos 147 1.1 christos ;; mov.w #xx:8, @erd 148 1.1 christos mov.l #word_dst, er1 149 1.1 christos mov.w #0xa5:8, @er1 ; Register indirect operand 150 1.1 christos ;;; .word 0x015d 151 1.1 christos ;;; .word 0x01a5 152 1.1 christos 153 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 154 1.1 christos test_neg_clear 155 1.1 christos test_zero_clear 156 1.1 christos test_ovf_clear 157 1.1 christos test_carry_clear 158 1.1 christos 159 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 160 1.1 christos test_h_gr32 word_dst, er1 161 1.1 christos test_gr_a5a5 2 162 1.1 christos test_gr_a5a5 3 163 1.1 christos test_gr_a5a5 4 164 1.1 christos test_gr_a5a5 5 165 1.1 christos test_gr_a5a5 6 166 1.1 christos test_gr_a5a5 7 167 1.1 christos 168 1.1 christos ;; Now check the result of the move to memory. 169 1.1 christos cmp.w #0xa5, @word_dst 170 1.1 christos beq .Lnext1 171 1.1 christos fail 172 1.1 christos .Lnext1: 173 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 174 1.1 christos 175 1.1 christos mov_w_imm8_to_postinc: ; post-increment from imm8 to mem 176 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 177 1.1 christos set_ccr_zero 178 1.1 christos 179 1.1 christos ;; mov.w #xx:8, @erd+ 180 1.1 christos mov.l #word_dst, er1 181 1.1 christos mov.w #0xa5:8, @er1+ ; Imm8, register post-incr operands. 182 1.1 christos ;;; .word 0x015d 183 1.1 christos ;;; .word 0x81a5 184 1.1 christos 185 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 186 1.1 christos test_neg_clear 187 1.1 christos test_zero_clear 188 1.1 christos test_ovf_clear 189 1.1 christos test_carry_clear 190 1.1 christos 191 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 192 1.1 christos test_h_gr32 word_dst+2, er1 193 1.1 christos test_gr_a5a5 2 194 1.1 christos test_gr_a5a5 3 195 1.1 christos test_gr_a5a5 4 196 1.1 christos test_gr_a5a5 5 197 1.1 christos test_gr_a5a5 6 198 1.1 christos test_gr_a5a5 7 199 1.1 christos 200 1.1 christos ;; Now check the result of the move to memory. 201 1.1 christos cmp.w #0xa5, @word_dst 202 1.1 christos beq .Lnext2 203 1.1 christos fail 204 1.1 christos .Lnext2: 205 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 206 1.1 christos 207 1.1 christos mov_w_imm8_to_postdec: ; post-decrement from imm8 to mem 208 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 209 1.1 christos set_ccr_zero 210 1.1 christos 211 1.1 christos ;; mov.w #xx:8, @erd- 212 1.1 christos mov.l #word_dst, er1 213 1.1 christos mov.w #0xa5:8, @er1- ; Imm8, register post-decr operands. 214 1.1 christos ;;; .word 0x015d 215 1.1 christos ;;; .word 0xa1a5 216 1.1 christos 217 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 218 1.1 christos test_neg_clear 219 1.1 christos test_zero_clear 220 1.1 christos test_ovf_clear 221 1.1 christos test_carry_clear 222 1.1 christos 223 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 224 1.1 christos test_h_gr32 word_dst-2, er1 225 1.1 christos test_gr_a5a5 2 226 1.1 christos test_gr_a5a5 3 227 1.1 christos test_gr_a5a5 4 228 1.1 christos test_gr_a5a5 5 229 1.1 christos test_gr_a5a5 6 230 1.1 christos test_gr_a5a5 7 231 1.1 christos 232 1.1 christos ;; Now check the result of the move to memory. 233 1.1 christos cmp.w #0xa5, @word_dst 234 1.1 christos beq .Lnext3 235 1.1 christos fail 236 1.1 christos .Lnext3: 237 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 238 1.1 christos 239 1.1 christos mov_w_imm8_to_preinc: ; pre-increment from register to mem 240 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 241 1.1 christos set_ccr_zero 242 1.1 christos 243 1.1 christos ;; mov.w #xx:8, @+erd 244 1.1 christos mov.l #word_dst-2, er1 245 1.1 christos mov.w #0xa5:8, @+er1 ; Imm8, register pre-incr operands 246 1.1 christos ;;; .word 0x015d 247 1.1 christos ;;; .word 0x91a5 248 1.1 christos 249 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 250 1.1 christos test_neg_clear 251 1.1 christos test_zero_clear 252 1.1 christos test_ovf_clear 253 1.1 christos test_carry_clear 254 1.1 christos 255 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 256 1.1 christos test_h_gr32 word_dst, er1 257 1.1 christos test_gr_a5a5 2 258 1.1 christos test_gr_a5a5 3 259 1.1 christos test_gr_a5a5 4 260 1.1 christos test_gr_a5a5 5 261 1.1 christos test_gr_a5a5 6 262 1.1 christos test_gr_a5a5 7 263 1.1 christos 264 1.1 christos ;; Now check the result of the move to memory. 265 1.1 christos cmp.w #0xa5, @word_dst 266 1.1 christos beq .Lnext4 267 1.1 christos fail 268 1.1 christos .Lnext4: 269 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 270 1.1 christos 271 1.1 christos mov_w_imm8_to_predec: ; pre-decrement from register to mem 272 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 273 1.1 christos set_ccr_zero 274 1.1 christos 275 1.1 christos ;; mov.w #xx:8, @-erd 276 1.1 christos mov.l #word_dst+2, er1 277 1.1 christos mov.w #0xa5:8, @-er1 ; Imm8, register pre-decr operands 278 1.1 christos ;;; .word 0x015d 279 1.1 christos ;;; .word 0xb1a5 280 1.1 christos 281 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 282 1.1 christos test_neg_clear 283 1.1 christos test_zero_clear 284 1.1 christos test_ovf_clear 285 1.1 christos test_carry_clear 286 1.1 christos 287 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 288 1.1 christos test_h_gr32 word_dst, er1 289 1.1 christos test_gr_a5a5 2 290 1.1 christos test_gr_a5a5 3 291 1.1 christos test_gr_a5a5 4 292 1.1 christos test_gr_a5a5 5 293 1.1 christos test_gr_a5a5 6 294 1.1 christos test_gr_a5a5 7 295 1.1 christos 296 1.1 christos ;; Now check the result of the move to memory. 297 1.1 christos cmp.w #0xa5, @word_dst 298 1.1 christos beq .Lnext5 299 1.1 christos fail 300 1.1 christos .Lnext5: 301 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 302 1.1 christos 303 1.1 christos mov_w_imm8_to_disp2: 304 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 305 1.1 christos set_ccr_zero 306 1.1 christos 307 1.1 christos ;; mov.w #xx:8, @(dd:2, erd) 308 1.1 christos mov.l #word_dst-6, er1 309 1.1 christos mov.w #0xa5:8, @(6:2, er1) ; Imm8, reg plus 2-bit disp. operand 310 1.1 christos ;;; .word 0x015d 311 1.1 christos ;;; .word 0x31a5 312 1.1 christos 313 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 314 1.1 christos test_neg_clear 315 1.1 christos test_zero_clear 316 1.1 christos test_ovf_clear 317 1.1 christos test_carry_clear 318 1.1 christos 319 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 320 1.1 christos test_h_gr32 word_dst-6, er1 321 1.1 christos test_gr_a5a5 2 322 1.1 christos test_gr_a5a5 3 323 1.1 christos test_gr_a5a5 4 324 1.1 christos test_gr_a5a5 5 325 1.1 christos test_gr_a5a5 6 326 1.1 christos test_gr_a5a5 7 327 1.1 christos 328 1.1 christos ;; Now check the result of the move to memory. 329 1.1 christos cmp.w #0xa5, @word_dst 330 1.1 christos beq .Lnext6 331 1.1 christos fail 332 1.1 christos .Lnext6: 333 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 334 1.1 christos 335 1.1 christos mov_w_imm8_to_disp16: 336 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 337 1.1 christos set_ccr_zero 338 1.1 christos 339 1.1 christos ;; mov.w #xx:8, @(dd:16, erd) 340 1.1 christos mov.l #word_dst-4, er1 341 1.1 christos mov.w #0xa5:8, @(4:16, er1) ; Register plus 16-bit disp. operand 342 1.1 christos ;;; .word 0x015d 343 1.1 christos ;;; .word 0x6f90 344 1.1 christos ;;; .word 0x0004 345 1.1 christos 346 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 347 1.1 christos test_neg_clear 348 1.1 christos test_zero_clear 349 1.1 christos test_ovf_clear 350 1.1 christos test_carry_clear 351 1.1 christos 352 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 353 1.1 christos test_h_gr32 word_dst-4, er1 354 1.1 christos test_gr_a5a5 2 355 1.1 christos test_gr_a5a5 3 356 1.1 christos test_gr_a5a5 4 357 1.1 christos test_gr_a5a5 5 358 1.1 christos test_gr_a5a5 6 359 1.1 christos test_gr_a5a5 7 360 1.1 christos 361 1.1 christos ;; Now check the result of the move to memory. 362 1.1 christos cmp.w #0xa5, @word_dst 363 1.1 christos beq .Lnext7 364 1.1 christos fail 365 1.1 christos .Lnext7: 366 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 367 1.1 christos 368 1.1 christos mov_w_imm8_to_disp32: 369 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 370 1.1 christos set_ccr_zero 371 1.1 christos 372 1.1 christos ;; mov.w #xx:8, @(dd:32, erd) 373 1.1 christos mov.l #word_dst-8, er1 374 1.1 christos mov.w #0xa5:8, @(8:32, er1) ; Register plus 32-bit disp. operand 375 1.1 christos ;;; .word 0x015d 376 1.1 christos ;;; .word 0xc9a5 377 1.1 christos ;;; .long 8 378 1.1 christos 379 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 380 1.1 christos test_neg_clear 381 1.1 christos test_zero_clear 382 1.1 christos test_ovf_clear 383 1.1 christos test_carry_clear 384 1.1 christos 385 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 386 1.1 christos test_h_gr32 word_dst-8, er1 387 1.1 christos test_gr_a5a5 2 388 1.1 christos test_gr_a5a5 3 389 1.1 christos test_gr_a5a5 4 390 1.1 christos test_gr_a5a5 5 391 1.1 christos test_gr_a5a5 6 392 1.1 christos test_gr_a5a5 7 393 1.1 christos 394 1.1 christos ;; Now check the result of the move to memory. 395 1.1 christos cmp.w #0xa5, @word_dst 396 1.1 christos beq .Lnext8 397 1.1 christos fail 398 1.1 christos .Lnext8: 399 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 400 1.1 christos 401 1.1 christos mov_w_imm8_to_abs16: 402 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 403 1.1 christos set_ccr_zero 404 1.1 christos 405 1.1 christos ;; mov.w #xx:8, @aa:16 406 1.1 christos mov.w #0xa5:8, @word_dst:16 ; 16-bit address-direct operand 407 1.1 christos ;;; .word 0x015d 408 1.1 christos ;;; .word 0x40a5 409 1.1 christos ;;; .word @word_dst 410 1.1 christos 411 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 412 1.1 christos test_neg_clear 413 1.1 christos test_zero_clear 414 1.1 christos test_ovf_clear 415 1.1 christos test_carry_clear 416 1.1 christos 417 1.1 christos test_gr_a5a5 0 ; Make sure _ALL_ general regs not disturbed 418 1.1 christos test_gr_a5a5 1 ; (first, because on h8/300 we must use one 419 1.1 christos test_gr_a5a5 2 ; to examine the destination memory). 420 1.1 christos test_gr_a5a5 3 421 1.1 christos test_gr_a5a5 4 422 1.1 christos test_gr_a5a5 5 423 1.1 christos test_gr_a5a5 6 424 1.1 christos test_gr_a5a5 7 425 1.1 christos 426 1.1 christos ;; Now check the result of the move to memory. 427 1.1 christos cmp.w #0xa5, @word_dst 428 1.1 christos beq .Lnext9 429 1.1 christos fail 430 1.1 christos .Lnext9: 431 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 432 1.1 christos 433 1.1 christos mov_w_imm8_to_abs32: 434 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 435 1.1 christos set_ccr_zero 436 1.1 christos 437 1.1 christos ;; mov.w #xx:8, @aa:32 438 1.1 christos mov.w #0xa5:8, @word_dst:32 ; 32-bit address-direct operand 439 1.1 christos ;;; .word 0x015d 440 1.1 christos ;;; .word 0x48a5 441 1.1 christos ;;; .long @word_dst 442 1.1 christos 443 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 444 1.1 christos test_neg_clear 445 1.1 christos test_zero_clear 446 1.1 christos test_ovf_clear 447 1.1 christos test_carry_clear 448 1.1 christos 449 1.1 christos test_gr_a5a5 0 ; Make sure _ALL_ general regs not disturbed 450 1.1 christos test_gr_a5a5 1 ; (first, because on h8/300 we must use one 451 1.1 christos test_gr_a5a5 2 ; to examine the destination memory). 452 1.1 christos test_gr_a5a5 3 453 1.1 christos test_gr_a5a5 4 454 1.1 christos test_gr_a5a5 5 455 1.1 christos test_gr_a5a5 6 456 1.1 christos test_gr_a5a5 7 457 1.1 christos 458 1.1 christos ;; Now check the result of the move to memory. 459 1.1 christos cmp.w #0xa5, @word_dst 460 1.1 christos beq .Lnext10 461 1.1 christos fail 462 1.1 christos .Lnext10: 463 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 464 1.1 christos 465 1.1 christos mov_w_imm16_to_indirect: 466 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 467 1.1 christos set_ccr_zero 468 1.1 christos 469 1.1 christos ;; mov.w #xx:16, @erd 470 1.1 christos mov.l #word_dst, er1 471 1.1 christos mov.w #0xdead:16, @er1 ; Register indirect operand 472 1.1 christos ;;; .word 0x7974 473 1.1 christos ;;; .word 0xdead 474 1.1 christos ;;; .word 0x0100 475 1.1 christos 476 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 477 1.1 christos test_neg_set 478 1.1 christos test_zero_clear 479 1.1 christos test_ovf_clear 480 1.1 christos test_carry_clear 481 1.1 christos 482 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 483 1.1 christos test_h_gr32 word_dst, er1 484 1.1 christos test_gr_a5a5 2 485 1.1 christos test_gr_a5a5 3 486 1.1 christos test_gr_a5a5 4 487 1.1 christos test_gr_a5a5 5 488 1.1 christos test_gr_a5a5 6 489 1.1 christos test_gr_a5a5 7 490 1.1 christos 491 1.1 christos ;; Now check the result of the move to memory. 492 1.1 christos cmp.w #0xdead, @word_dst 493 1.1 christos beq .Lnext11 494 1.1 christos fail 495 1.1 christos .Lnext11: 496 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 497 1.1 christos 498 1.1 christos mov_w_imm16_to_postinc: ; post-increment from imm16 to mem 499 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 500 1.1 christos set_ccr_zero 501 1.1 christos 502 1.1 christos ;; mov.w #xx:16, @erd+ 503 1.1 christos mov.l #word_dst, er1 504 1.1 christos mov.w #0xdead:16, @er1+ ; Imm16, register post-incr operands. 505 1.1 christos ;;; .word 0x7974 506 1.1 christos ;;; .word 0xdead 507 1.1 christos ;;; .word 0x8100 508 1.1 christos 509 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 510 1.1 christos test_neg_set 511 1.1 christos test_zero_clear 512 1.1 christos test_ovf_clear 513 1.1 christos test_carry_clear 514 1.1 christos 515 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 516 1.1 christos test_h_gr32 word_dst+2, er1 517 1.1 christos test_gr_a5a5 2 518 1.1 christos test_gr_a5a5 3 519 1.1 christos test_gr_a5a5 4 520 1.1 christos test_gr_a5a5 5 521 1.1 christos test_gr_a5a5 6 522 1.1 christos test_gr_a5a5 7 523 1.1 christos 524 1.1 christos ;; Now check the result of the move to memory. 525 1.1 christos cmp.w #0xdead, @word_dst 526 1.1 christos beq .Lnext12 527 1.1 christos fail 528 1.1 christos .Lnext12: 529 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 530 1.1 christos 531 1.1 christos mov_w_imm16_to_postdec: ; post-decrement from imm16 to mem 532 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 533 1.1 christos set_ccr_zero 534 1.1 christos 535 1.1 christos ;; mov.w #xx:16, @erd- 536 1.1 christos mov.l #word_dst, er1 537 1.1 christos mov.w #0xdead:16, @er1- ; Imm16, register post-decr operands. 538 1.1 christos ;;; .word 0x7974 539 1.1 christos ;;; .word 0xdead 540 1.1 christos ;;; .word 0xa100 541 1.1 christos 542 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 543 1.1 christos test_neg_set 544 1.1 christos test_zero_clear 545 1.1 christos test_ovf_clear 546 1.1 christos test_carry_clear 547 1.1 christos 548 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 549 1.1 christos test_h_gr32 word_dst-2, er1 550 1.1 christos test_gr_a5a5 2 551 1.1 christos test_gr_a5a5 3 552 1.1 christos test_gr_a5a5 4 553 1.1 christos test_gr_a5a5 5 554 1.1 christos test_gr_a5a5 6 555 1.1 christos test_gr_a5a5 7 556 1.1 christos 557 1.1 christos ;; Now check the result of the move to memory. 558 1.1 christos cmp.w #0xdead, @word_dst 559 1.1 christos beq .Lnext13 560 1.1 christos fail 561 1.1 christos .Lnext13: 562 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 563 1.1 christos 564 1.1 christos mov_w_imm16_to_preinc: ; pre-increment from register to mem 565 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 566 1.1 christos set_ccr_zero 567 1.1 christos 568 1.1 christos ;; mov.w #xx:16, @+erd 569 1.1 christos mov.l #word_dst-2, er1 570 1.1 christos mov.w #0xdead:16, @+er1 ; Imm16, register pre-incr operands 571 1.1 christos ;;; .word 0x7974 572 1.1 christos ;;; .word 0xdead 573 1.1 christos ;;; .word 0x9100 574 1.1 christos 575 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 576 1.1 christos test_neg_set 577 1.1 christos test_zero_clear 578 1.1 christos test_ovf_clear 579 1.1 christos test_carry_clear 580 1.1 christos 581 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 582 1.1 christos test_h_gr32 word_dst, er1 583 1.1 christos test_gr_a5a5 2 584 1.1 christos test_gr_a5a5 3 585 1.1 christos test_gr_a5a5 4 586 1.1 christos test_gr_a5a5 5 587 1.1 christos test_gr_a5a5 6 588 1.1 christos test_gr_a5a5 7 589 1.1 christos 590 1.1 christos ;; Now check the result of the move to memory. 591 1.1 christos cmp.w #0xdead, @word_dst 592 1.1 christos beq .Lnext14 593 1.1 christos fail 594 1.1 christos .Lnext14: 595 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 596 1.1 christos 597 1.1 christos mov_w_imm16_to_predec: ; pre-decrement from register to mem 598 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 599 1.1 christos set_ccr_zero 600 1.1 christos 601 1.1 christos ;; mov.w #xx:16, @-erd 602 1.1 christos mov.l #word_dst+2, er1 603 1.1 christos mov.w #0xdead:16, @-er1 ; Imm16, register pre-decr operands 604 1.1 christos ;;; .word 0x7974 605 1.1 christos ;;; .word 0xdead 606 1.1 christos ;;; .word 0xb100 607 1.1 christos 608 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 609 1.1 christos test_neg_set 610 1.1 christos test_zero_clear 611 1.1 christos test_ovf_clear 612 1.1 christos test_carry_clear 613 1.1 christos 614 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 615 1.1 christos test_h_gr32 word_dst, er1 616 1.1 christos test_gr_a5a5 2 617 1.1 christos test_gr_a5a5 3 618 1.1 christos test_gr_a5a5 4 619 1.1 christos test_gr_a5a5 5 620 1.1 christos test_gr_a5a5 6 621 1.1 christos test_gr_a5a5 7 622 1.1 christos 623 1.1 christos ;; Now check the result of the move to memory. 624 1.1 christos cmp.w #0xdead, @word_dst 625 1.1 christos beq .Lnext15 626 1.1 christos fail 627 1.1 christos .Lnext15: 628 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 629 1.1 christos 630 1.1 christos mov_w_imm16_to_disp2: 631 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 632 1.1 christos set_ccr_zero 633 1.1 christos 634 1.1 christos ;; mov.w #xx:16, @(dd:2, erd) 635 1.1 christos mov.l #word_dst-6, er1 636 1.1 christos mov.w #0xdead:16, @(6:2, er1) ; Imm16, reg plus 2-bit disp. operand 637 1.1 christos ;;; .word 0x7974 638 1.1 christos ;;; .word 0xdead 639 1.1 christos ;;; .word 0x3100 640 1.1 christos 641 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 642 1.1 christos test_neg_set 643 1.1 christos test_zero_clear 644 1.1 christos test_ovf_clear 645 1.1 christos test_carry_clear 646 1.1 christos 647 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 648 1.1 christos test_h_gr32 word_dst-6, er1 649 1.1 christos test_gr_a5a5 2 650 1.1 christos test_gr_a5a5 3 651 1.1 christos test_gr_a5a5 4 652 1.1 christos test_gr_a5a5 5 653 1.1 christos test_gr_a5a5 6 654 1.1 christos test_gr_a5a5 7 655 1.1 christos 656 1.1 christos ;; Now check the result of the move to memory. 657 1.1 christos cmp.w #0xdead, @word_dst 658 1.1 christos beq .Lnext16 659 1.1 christos fail 660 1.1 christos .Lnext16: 661 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 662 1.1 christos 663 1.1 christos mov_w_imm16_to_disp16: 664 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 665 1.1 christos set_ccr_zero 666 1.1 christos 667 1.1 christos ;; mov.w #xx:16, @(dd:16, erd) 668 1.1 christos mov.l #word_dst-4, er1 669 1.1 christos mov.w #0xdead:16, @(4:16, er1) ; Register plus 16-bit disp. operand 670 1.1 christos ;;; .word 0x7974 671 1.1 christos ;;; .word 0xdead 672 1.1 christos ;;; .word 0xc100 673 1.1 christos ;;; .word 0x0004 674 1.1 christos 675 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 676 1.1 christos test_neg_set 677 1.1 christos test_zero_clear 678 1.1 christos test_ovf_clear 679 1.1 christos test_carry_clear 680 1.1 christos 681 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 682 1.1 christos test_h_gr32 word_dst-4, er1 683 1.1 christos test_gr_a5a5 2 684 1.1 christos test_gr_a5a5 3 685 1.1 christos test_gr_a5a5 4 686 1.1 christos test_gr_a5a5 5 687 1.1 christos test_gr_a5a5 6 688 1.1 christos test_gr_a5a5 7 689 1.1 christos 690 1.1 christos ;; Now check the result of the move to memory. 691 1.1 christos cmp.w #0xdead, @word_dst 692 1.1 christos beq .Lnext17 693 1.1 christos fail 694 1.1 christos .Lnext17: 695 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 696 1.1 christos 697 1.1 christos mov_w_imm16_to_disp32: 698 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 699 1.1 christos set_ccr_zero 700 1.1 christos 701 1.1 christos ;; mov.w #xx:16, @(dd:32, erd) 702 1.1 christos mov.l #word_dst-8, er1 703 1.1 christos mov.w #0xdead:16, @(8:32, er1) ; Register plus 32-bit disp. operand 704 1.1 christos ;;; .word 0x7974 705 1.1 christos ;;; .word 0xdead 706 1.1 christos ;;; .word 0xc900 707 1.1 christos ;;; .long 8 708 1.1 christos 709 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 710 1.1 christos test_neg_set 711 1.1 christos test_zero_clear 712 1.1 christos test_ovf_clear 713 1.1 christos test_carry_clear 714 1.1 christos 715 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 716 1.1 christos test_h_gr32 word_dst-8, er1 717 1.1 christos test_gr_a5a5 2 718 1.1 christos test_gr_a5a5 3 719 1.1 christos test_gr_a5a5 4 720 1.1 christos test_gr_a5a5 5 721 1.1 christos test_gr_a5a5 6 722 1.1 christos test_gr_a5a5 7 723 1.1 christos 724 1.1 christos ;; Now check the result of the move to memory. 725 1.1 christos cmp.w #0xdead, @word_dst 726 1.1 christos beq .Lnext18 727 1.1 christos fail 728 1.1 christos .Lnext18: 729 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 730 1.1 christos 731 1.1 christos mov_w_imm16_to_abs16: 732 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 733 1.1 christos set_ccr_zero 734 1.1 christos 735 1.1 christos ;; mov.w #xx:16, @aa:16 736 1.1 christos mov.w #0xdead:16, @word_dst:16 ; 16-bit address-direct operand 737 1.1 christos ;;; .word 0x7974 738 1.1 christos ;;; .word 0xdead 739 1.1 christos ;;; .word 0x4000 740 1.1 christos ;;; .word @word_dst 741 1.1 christos 742 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 743 1.1 christos test_neg_set 744 1.1 christos test_zero_clear 745 1.1 christos test_ovf_clear 746 1.1 christos test_carry_clear 747 1.1 christos 748 1.1 christos test_gr_a5a5 0 ; Make sure _ALL_ general regs not disturbed 749 1.1 christos test_gr_a5a5 1 ; (first, because on h8/300 we must use one 750 1.1 christos test_gr_a5a5 2 ; to examine the destination memory). 751 1.1 christos test_gr_a5a5 3 752 1.1 christos test_gr_a5a5 4 753 1.1 christos test_gr_a5a5 5 754 1.1 christos test_gr_a5a5 6 755 1.1 christos test_gr_a5a5 7 756 1.1 christos 757 1.1 christos ;; Now check the result of the move to memory. 758 1.1 christos cmp.w #0xdead, @word_dst 759 1.1 christos beq .Lnext19 760 1.1 christos fail 761 1.1 christos .Lnext19: 762 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 763 1.1 christos 764 1.1 christos mov_w_imm16_to_abs32: 765 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 766 1.1 christos set_ccr_zero 767 1.1 christos 768 1.1 christos ;; mov.w #xx:16, @aa:32 769 1.1 christos mov.w #0xdead:16, @word_dst:32 ; 32-bit address-direct operand 770 1.1 christos ;;; .word 0x7974 771 1.1 christos ;;; .word 0xdead 772 1.1 christos ;;; .word 0x4800 773 1.1 christos ;;; .long @word_dst 774 1.1 christos 775 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 776 1.1 christos test_neg_set 777 1.1 christos test_zero_clear 778 1.1 christos test_ovf_clear 779 1.1 christos test_carry_clear 780 1.1 christos 781 1.1 christos test_gr_a5a5 0 ; Make sure _ALL_ general regs not disturbed 782 1.1 christos test_gr_a5a5 1 ; (first, because on h8/300 we must use one 783 1.1 christos test_gr_a5a5 2 ; to examine the destination memory). 784 1.1 christos test_gr_a5a5 3 785 1.1 christos test_gr_a5a5 4 786 1.1 christos test_gr_a5a5 5 787 1.1 christos test_gr_a5a5 6 788 1.1 christos test_gr_a5a5 7 789 1.1 christos 790 1.1 christos ;; Now check the result of the move to memory. 791 1.1 christos cmp.w #0xdead, @word_dst 792 1.1 christos beq .Lnext20 793 1.1 christos fail 794 1.1 christos .Lnext20: 795 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 796 1.1 christos .endif 797 1.1 christos 798 1.1 christos ;; 799 1.1 christos ;; Move word from register source 800 1.1 christos ;; 801 1.1 christos 802 1.1 christos mov_w_reg16_to_reg16: 803 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 804 1.1 christos set_ccr_zero 805 1.1 christos 806 1.1 christos ;; mov.w ers, erd 807 1.1 christos mov.w #0x1234, r1 808 1.1 christos mov.w r1, r0 ; Register 16-bit operand 809 1.1 christos ;;; .word 0x0d10 810 1.1 christos 811 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 812 1.1 christos test_neg_clear 813 1.1 christos test_zero_clear 814 1.1 christos test_ovf_clear 815 1.1 christos test_carry_clear 816 1.1 christos test_h_gr16 0x1234 r0 817 1.1 christos test_h_gr16 0x1234 r1 ; mov src unchanged 818 1.1 christos .if (sim_cpu) 819 1.1 christos test_h_gr32 0xa5a51234 er0 820 1.1 christos test_h_gr32 0xa5a51234 er1 ; mov src unchanged 821 1.1 christos .endif 822 1.1 christos test_gr_a5a5 2 ; Make sure other general regs not disturbed 823 1.1 christos test_gr_a5a5 3 824 1.1 christos test_gr_a5a5 4 825 1.1 christos test_gr_a5a5 5 826 1.1 christos test_gr_a5a5 6 827 1.1 christos test_gr_a5a5 7 828 1.1 christos 829 1.1 christos 830 1.1 christos mov_w_reg16_to_indirect: 831 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 832 1.1 christos set_ccr_zero 833 1.1 christos 834 1.1 christos ;; mov.w ers, @erd 835 1.1 christos mov.l #word_dst, er1 836 1.1 christos mov.w r0, @er1 ; Register indirect operand 837 1.1 christos ;;; .word 0x6990 838 1.1 christos 839 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 840 1.1 christos test_neg_set 841 1.1 christos test_zero_clear 842 1.1 christos test_ovf_clear 843 1.1 christos test_carry_clear 844 1.1 christos 845 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 846 1.1 christos test_h_gr32 word_dst, er1 847 1.1 christos test_gr_a5a5 2 848 1.1 christos test_gr_a5a5 3 849 1.1 christos test_gr_a5a5 4 850 1.1 christos test_gr_a5a5 5 851 1.1 christos test_gr_a5a5 6 852 1.1 christos test_gr_a5a5 7 853 1.1 christos 854 1.1 christos ;; Now check the result of the move to memory. 855 1.1 christos mov.w #0, r0 856 1.1 christos mov.w @word_dst, r0 857 1.1 christos cmp.w r2, r0 858 1.1 christos beq .Lnext44 859 1.1 christos fail 860 1.1 christos .Lnext44: 861 1.1 christos mov.w #0, r0 862 1.1 christos mov.w r0, @word_dst ; zero it again for the next use. 863 1.1 christos 864 1.1 christos .if (sim_cpu == h8sx) 865 1.1 christos mov_w_reg16_to_postinc: ; post-increment from register to mem 866 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 867 1.1 christos set_ccr_zero 868 1.1 christos 869 1.1 christos ;; mov.w ers, @erd+ 870 1.1 christos mov.l #word_dst, er1 871 1.1 christos mov.w r0, @er1+ ; Register post-incr operand 872 1.1 christos ;;; .word 0x0153 873 1.1 christos ;;; .word 0x6d90 874 1.1 christos 875 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 876 1.1 christos test_neg_set 877 1.1 christos test_zero_clear 878 1.1 christos test_ovf_clear 879 1.1 christos test_carry_clear 880 1.1 christos 881 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 882 1.1 christos test_h_gr32 word_dst+2, er1 883 1.1 christos test_gr_a5a5 2 884 1.1 christos test_gr_a5a5 3 885 1.1 christos test_gr_a5a5 4 886 1.1 christos test_gr_a5a5 5 887 1.1 christos test_gr_a5a5 6 888 1.1 christos test_gr_a5a5 7 889 1.1 christos 890 1.1 christos ;; Now check the result of the move to memory. 891 1.1 christos cmp.w r2, @word_dst 892 1.1 christos beq .Lnext49 893 1.1 christos fail 894 1.1 christos .Lnext49: 895 1.1 christos ;; special case same register 896 1.1 christos mov.l #word_dst, er0 897 1.1 christos mov.w r0, r1 898 1.1 christos inc.w #2,r1 899 1.1 christos mov.w r0, @er0+ 900 1.1 christos mov.w @word_dst, r0 901 1.1 christos cmp.w r0, r1 902 1.1 christos beq .Lnext53 903 1.1 christos fail 904 1.1 christos .Lnext53: 905 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 906 1.1 christos 907 1.1 christos mov_w_reg16_to_postdec: ; post-decrement from register to mem 908 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 909 1.1 christos set_ccr_zero 910 1.1 christos 911 1.1 christos ;; mov.w ers, @erd- 912 1.1 christos mov.l #word_dst, er1 913 1.1 christos mov.w r0, @er1- ; Register post-decr operand 914 1.1 christos ;;; .word 0x0151 915 1.1 christos ;;; .word 0x6d90 916 1.1 christos 917 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 918 1.1 christos test_neg_set 919 1.1 christos test_zero_clear 920 1.1 christos test_ovf_clear 921 1.1 christos test_carry_clear 922 1.1 christos 923 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 924 1.1 christos test_h_gr32 word_dst-2, er1 925 1.1 christos test_gr_a5a5 2 926 1.1 christos test_gr_a5a5 3 927 1.1 christos test_gr_a5a5 4 928 1.1 christos test_gr_a5a5 5 929 1.1 christos test_gr_a5a5 6 930 1.1 christos test_gr_a5a5 7 931 1.1 christos 932 1.1 christos ;; Now check the result of the move to memory. 933 1.1 christos cmp.w r2, @word_dst 934 1.1 christos beq .Lnext50 935 1.1 christos fail 936 1.1 christos .Lnext50: 937 1.1 christos ;; special case same register 938 1.1 christos mov.l #word_dst, er0 939 1.1 christos mov.w r0, r1 940 1.1 christos dec.w #2, r1 941 1.1 christos mov.w r0, @er0- 942 1.1 christos mov.w @word_dst, r0 943 1.1 christos cmp.w r0, r1 944 1.1 christos beq .Lnext54 945 1.1 christos fail 946 1.1 christos .Lnext54: 947 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 948 1.1 christos 949 1.1 christos mov_w_reg16_to_preinc: ; pre-increment from register to mem 950 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 951 1.1 christos set_ccr_zero 952 1.1 christos 953 1.1 christos ;; mov.w ers, @+erd 954 1.1 christos mov.l #word_dst-2, er1 955 1.1 christos mov.w r0, @+er1 ; Register pre-incr operand 956 1.1 christos ;;; .word 0x0152 957 1.1 christos ;;; .word 0x6d90 958 1.1 christos 959 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 960 1.1 christos test_neg_set 961 1.1 christos test_zero_clear 962 1.1 christos test_ovf_clear 963 1.1 christos test_carry_clear 964 1.1 christos 965 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 966 1.1 christos test_h_gr32 word_dst, er1 967 1.1 christos test_gr_a5a5 2 968 1.1 christos test_gr_a5a5 3 969 1.1 christos test_gr_a5a5 4 970 1.1 christos test_gr_a5a5 5 971 1.1 christos test_gr_a5a5 6 972 1.1 christos test_gr_a5a5 7 973 1.1 christos 974 1.1 christos ;; Now check the result of the move to memory. 975 1.1 christos cmp.w r2, @word_dst 976 1.1 christos beq .Lnext51 977 1.1 christos fail 978 1.1 christos .Lnext51: 979 1.1 christos ;; special case same register 980 1.1 christos mov.l #word_dst-2, er0 981 1.1 christos mov.w r0, r1 982 1.1 christos inc.w #2, r1 983 1.1 christos mov.w r0, @+er0 984 1.1 christos mov.w @word_dst, r0 985 1.1 christos cmp.w r0, r1 986 1.1 christos beq .Lnext55 987 1.1 christos fail 988 1.1 christos .Lnext55: 989 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 990 1.1 christos .endif 991 1.1 christos 992 1.1 christos mov_w_reg16_to_predec: ; pre-decrement from register to mem 993 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 994 1.1 christos set_ccr_zero 995 1.1 christos 996 1.1 christos ;; mov.w ers, @-erd 997 1.1 christos mov.l #word_dst+2, er1 998 1.1 christos mov.w r0, @-er1 ; Register pre-decr operand 999 1.1 christos ;;; .word 0x6d90 1000 1.1 christos 1001 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 1002 1.1 christos test_neg_set 1003 1.1 christos test_zero_clear 1004 1.1 christos test_ovf_clear 1005 1.1 christos test_carry_clear 1006 1.1 christos 1007 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 1008 1.1 christos test_h_gr32 word_dst, er1 1009 1.1 christos test_gr_a5a5 2 1010 1.1 christos test_gr_a5a5 3 1011 1.1 christos test_gr_a5a5 4 1012 1.1 christos test_gr_a5a5 5 1013 1.1 christos test_gr_a5a5 6 1014 1.1 christos test_gr_a5a5 7 1015 1.1 christos 1016 1.1 christos ;; Now check the result of the move to memory. 1017 1.1 christos mov.w #0, r0 1018 1.1 christos mov.w @word_dst, r0 1019 1.1 christos cmp.w r2, r0 1020 1.1 christos beq .Lnext48 1021 1.1 christos fail 1022 1.1 christos .Lnext48: 1023 1.1 christos ;; Special case in same register 1024 1.1 christos ;; CCR confirmation omitted 1025 1.1 christos mov.l #word_dst+2, er1 1026 1.1 christos mov.l er1, er0 1027 1.1 christos dec.w #2, r1 1028 1.1 christos mov.w r0, @-er0 1029 1.1 christos mov.w @word_dst, r0 1030 1.1 christos cmp.w r1, r0 1031 1.1 christos beq .Lnext47 1032 1.1 christos fail 1033 1.1 christos .Lnext47: 1034 1.1 christos mov.w #0, r0 1035 1.1 christos mov.w r0, @word_dst ; zero it again for the next use. 1036 1.1 christos 1037 1.1 christos .if (sim_cpu == h8sx) 1038 1.1 christos mov_w_reg16_to_disp2: 1039 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1040 1.1 christos set_ccr_zero 1041 1.1 christos 1042 1.1 christos ;; mov.w ers, @(dd:2, erd) 1043 1.1 christos mov.l #word_dst-6, er1 1044 1.1 christos mov.w r0, @(6:2, er1) ; Register plus 2-bit disp. operand 1045 1.1 christos ;;; .word 0x0153 1046 1.1 christos ;;; .word 0x6990 1047 1.1 christos 1048 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 1049 1.1 christos test_neg_set 1050 1.1 christos test_zero_clear 1051 1.1 christos test_ovf_clear 1052 1.1 christos test_carry_clear 1053 1.1 christos 1054 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 1055 1.1 christos test_h_gr32 word_dst-6, er1 1056 1.1 christos test_gr_a5a5 2 1057 1.1 christos test_gr_a5a5 3 1058 1.1 christos test_gr_a5a5 4 1059 1.1 christos test_gr_a5a5 5 1060 1.1 christos test_gr_a5a5 6 1061 1.1 christos test_gr_a5a5 7 1062 1.1 christos 1063 1.1 christos ;; Now check the result of the move to memory. 1064 1.1 christos cmp.w r2, @word_dst 1065 1.1 christos beq .Lnext52 1066 1.1 christos fail 1067 1.1 christos .Lnext52: 1068 1.1 christos mov.w #0, @word_dst ; zero it again for the next use. 1069 1.1 christos .endif 1070 1.1 christos 1071 1.1 christos mov_w_reg16_to_disp16: 1072 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1073 1.1 christos set_ccr_zero 1074 1.1 christos 1075 1.1 christos ;; mov.w ers, @(dd:16, erd) 1076 1.1 christos mov.l #word_dst-4, er1 1077 1.1 christos mov.w r0, @(4:16, er1) ; Register plus 16-bit disp. operand 1078 1.1 christos ;;; .word 0x6f90 1079 1.1 christos ;;; .word 0x0004 1080 1.1 christos 1081 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 1082 1.1 christos test_neg_set 1083 1.1 christos test_zero_clear 1084 1.1 christos test_ovf_clear 1085 1.1 christos test_carry_clear 1086 1.1 christos 1087 1.1 christos test_h_gr32 word_dst-4, er1 1088 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 1089 1.1 christos test_gr_a5a5 2 1090 1.1 christos test_gr_a5a5 3 1091 1.1 christos test_gr_a5a5 4 1092 1.1 christos test_gr_a5a5 5 1093 1.1 christos test_gr_a5a5 6 1094 1.1 christos test_gr_a5a5 7 1095 1.1 christos 1096 1.1 christos ;; Now check the result of the move to memory. 1097 1.1 christos mov.w #0, r0 1098 1.1 christos mov.w @word_dst, r0 1099 1.1 christos cmp.w r2, r0 1100 1.1 christos beq .Lnext45 1101 1.1 christos fail 1102 1.1 christos .Lnext45: 1103 1.1 christos mov.w #0, r0 1104 1.1 christos mov.w r0, @word_dst ; zero it again for the next use. 1105 1.1 christos 1106 1.1 christos mov_w_reg16_to_disp32: 1107 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1108 1.1 christos set_ccr_zero 1109 1.1 christos 1110 1.1 christos ;; mov.w ers, @(dd:32, erd) 1111 1.1 christos mov.l #word_dst-8, er1 1112 1.1 christos mov.w r0, @(8:32, er1) ; Register plus 32-bit disp. operand 1113 1.1 christos ;;; .word 0x7810 1114 1.1 christos ;;; .word 0x6ba0 1115 1.1 christos ;;; .long 8 1116 1.1 christos 1117 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 1118 1.1 christos test_neg_set 1119 1.1 christos test_zero_clear 1120 1.1 christos test_ovf_clear 1121 1.1 christos test_carry_clear 1122 1.1 christos 1123 1.1 christos test_h_gr32 word_dst-8, er1 1124 1.1 christos test_gr_a5a5 0 ; Make sure other general regs not disturbed 1125 1.1 christos test_gr_a5a5 2 1126 1.1 christos test_gr_a5a5 3 1127 1.1 christos test_gr_a5a5 4 1128 1.1 christos test_gr_a5a5 5 1129 1.1 christos test_gr_a5a5 6 1130 1.1 christos test_gr_a5a5 7 1131 1.1 christos 1132 1.1 christos ;; Now check the result of the move to memory. 1133 1.1 christos mov.w #0, r0 1134 1.1 christos mov.w @word_dst, r0 1135 1.1 christos cmp.w r2, r0 1136 1.1 christos beq .Lnext46 1137 1.1 christos fail 1138 1.1 christos .Lnext46: 1139 1.1 christos mov.w #0, r0 1140 1.1 christos mov.w r0, @word_dst ; zero it again for the next use. 1141 1.1 christos 1142 1.1 christos mov_w_reg16_to_abs16: 1143 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1144 1.1 christos set_ccr_zero 1145 1.1 christos 1146 1.1 christos ;; mov.w ers, @aa:16 1147 1.1 christos mov.w r0, @word_dst:16 ; 16-bit address-direct operand 1148 1.1 christos ;;; .word 0x6b80 1149 1.1 christos ;;; .word @word_dst 1150 1.1 christos 1151 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 1152 1.1 christos test_neg_set 1153 1.1 christos test_zero_clear 1154 1.1 christos test_ovf_clear 1155 1.1 christos test_carry_clear 1156 1.1 christos 1157 1.1 christos test_gr_a5a5 0 ; Make sure _ALL_ general regs not disturbed 1158 1.1 christos test_gr_a5a5 1 ; (first, because on h8/300 we must use one 1159 1.1 christos test_gr_a5a5 2 ; to examine the destination memory). 1160 1.1 christos test_gr_a5a5 3 1161 1.1 christos test_gr_a5a5 4 1162 1.1 christos test_gr_a5a5 5 1163 1.1 christos test_gr_a5a5 6 1164 1.1 christos test_gr_a5a5 7 1165 1.1 christos 1166 1.1 christos ;; Now check the result of the move to memory. 1167 1.1 christos mov.w #0, r0 1168 1.1 christos mov.w @word_dst, r0 1169 1.1 christos cmp.w r0, r1 1170 1.1 christos beq .Lnext41 1171 1.1 christos fail 1172 1.1 christos .Lnext41: 1173 1.1 christos mov.w #0, r0 1174 1.1 christos mov.w r0, @word_dst ; zero it again for the next use. 1175 1.1 christos 1176 1.1 christos mov_w_reg16_to_abs32: 1177 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1178 1.1 christos set_ccr_zero 1179 1.1 christos 1180 1.1 christos ;; mov.w ers, @aa:32 1181 1.1 christos mov.w r0, @word_dst:32 ; 32-bit address-direct operand 1182 1.1 christos ;;; .word 0x6ba0 1183 1.1 christos ;;; .long @word_dst 1184 1.1 christos 1185 1.1 christos ;; test ccr ; H=0 N=1 Z=0 V=0 C=0 1186 1.1 christos test_neg_set 1187 1.1 christos test_zero_clear 1188 1.1 christos test_ovf_clear 1189 1.1 christos test_carry_clear 1190 1.1 christos 1191 1.1 christos test_gr_a5a5 0 ; Make sure _ALL_ general regs not disturbed 1192 1.1 christos test_gr_a5a5 1 ; (first, because on h8/300 we must use one 1193 1.1 christos test_gr_a5a5 2 ; to examine the destination memory). 1194 1.1 christos test_gr_a5a5 3 1195 1.1 christos test_gr_a5a5 4 1196 1.1 christos test_gr_a5a5 5 1197 1.1 christos test_gr_a5a5 6 1198 1.1 christos test_gr_a5a5 7 1199 1.1 christos 1200 1.1 christos ;; Now check the result of the move to memory. 1201 1.1 christos mov.w #0, r0 1202 1.1 christos mov.w @word_dst, r0 1203 1.1 christos cmp.w r0, r1 1204 1.1 christos beq .Lnext42 1205 1.1 christos fail 1206 1.1 christos .Lnext42: 1207 1.1 christos mov.w #0, r0 1208 1.1 christos mov.w r0, @word_dst ; zero it again for the next use. 1209 1.1 christos 1210 1.1 christos ;; 1211 1.1 christos ;; Move word to register destination. 1212 1.1 christos ;; 1213 1.1 christos 1214 1.1 christos mov_w_indirect_to_reg16: 1215 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1216 1.1 christos set_ccr_zero 1217 1.1 christos 1218 1.1 christos ;; mov.w @ers, rd 1219 1.1 christos mov.l #word_src, er1 1220 1.1 christos mov.w @er1, r0 ; Register indirect operand 1221 1.1 christos ;;; .word 0x6910 1222 1.1 christos 1223 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1224 1.1 christos test_neg_clear 1225 1.1 christos test_zero_clear 1226 1.1 christos test_ovf_clear 1227 1.1 christos test_carry_clear 1228 1.1 christos 1229 1.1 christos test_h_gr32 0xa5a57777 er0 1230 1.1 christos 1231 1.1 christos test_h_gr32 word_src, er1 1232 1.1 christos test_gr_a5a5 2 ; Make sure other general regs not disturbed 1233 1.1 christos test_gr_a5a5 3 1234 1.1 christos test_gr_a5a5 4 1235 1.1 christos test_gr_a5a5 5 1236 1.1 christos test_gr_a5a5 6 1237 1.1 christos test_gr_a5a5 7 1238 1.1 christos 1239 1.1 christos mov_w_postinc_to_reg16: ; post-increment from mem to register 1240 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1241 1.1 christos set_ccr_zero 1242 1.1 christos 1243 1.1 christos ;; mov.w @ers+, rd 1244 1.1 christos 1245 1.1 christos mov.l #word_src, er1 1246 1.1 christos mov.w @er1+, r0 ; Register post-incr operand 1247 1.1 christos ;;; .word 0x6d10 1248 1.1 christos 1249 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1250 1.1 christos test_neg_clear 1251 1.1 christos test_zero_clear 1252 1.1 christos test_ovf_clear 1253 1.1 christos test_carry_clear 1254 1.1 christos 1255 1.1 christos test_h_gr32 0xa5a57777 er0 1256 1.1 christos 1257 1.1 christos test_h_gr32 word_src+2, er1 1258 1.1 christos test_gr_a5a5 2 ; Make sure other general regs not disturbed 1259 1.1 christos test_gr_a5a5 3 1260 1.1 christos test_gr_a5a5 4 1261 1.1 christos test_gr_a5a5 5 1262 1.1 christos test_gr_a5a5 6 1263 1.1 christos test_gr_a5a5 7 1264 1.1 christos 1265 1.1 christos .if (sim_cpu == h8sx) 1266 1.1 christos mov_w_postdec_to_reg16: ; post-decrement from mem to register 1267 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1268 1.1 christos set_ccr_zero 1269 1.1 christos 1270 1.1 christos ;; mov.w @ers-, rd 1271 1.1 christos 1272 1.1 christos mov.l #word_src, er1 1273 1.1 christos mov.w @er1-, r0 ; Register post-decr operand 1274 1.1 christos ;;; .word 0x0152 1275 1.1 christos ;;; .word 0x6d10 1276 1.1 christos 1277 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1278 1.1 christos test_neg_clear 1279 1.1 christos test_zero_clear 1280 1.1 christos test_ovf_clear 1281 1.1 christos test_carry_clear 1282 1.1 christos 1283 1.1 christos test_h_gr32 0xa5a57777 er0 1284 1.1 christos 1285 1.1 christos test_h_gr32 word_src-2, er1 1286 1.1 christos test_gr_a5a5 2 ; Make sure other general regs not disturbed 1287 1.1 christos test_gr_a5a5 3 1288 1.1 christos test_gr_a5a5 4 1289 1.1 christos test_gr_a5a5 5 1290 1.1 christos test_gr_a5a5 6 1291 1.1 christos test_gr_a5a5 7 1292 1.1 christos 1293 1.1 christos mov_w_preinc_to_reg16: ; pre-increment from mem to register 1294 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1295 1.1 christos set_ccr_zero 1296 1.1 christos 1297 1.1 christos ;; mov.w @+ers, rd 1298 1.1 christos 1299 1.1 christos mov.l #word_src-2, er1 1300 1.1 christos mov.w @+er1, r0 ; Register pre-incr operand 1301 1.1 christos ;;; .word 0x0151 1302 1.1 christos ;;; .word 0x6d10 1303 1.1 christos 1304 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1305 1.1 christos test_neg_clear 1306 1.1 christos test_zero_clear 1307 1.1 christos test_ovf_clear 1308 1.1 christos test_carry_clear 1309 1.1 christos 1310 1.1 christos test_h_gr32 0xa5a57777 er0 1311 1.1 christos 1312 1.1 christos test_h_gr32 word_src, er1 1313 1.1 christos test_gr_a5a5 2 ; Make sure other general regs not disturbed 1314 1.1 christos test_gr_a5a5 3 1315 1.1 christos test_gr_a5a5 4 1316 1.1 christos test_gr_a5a5 5 1317 1.1 christos test_gr_a5a5 6 1318 1.1 christos test_gr_a5a5 7 1319 1.1 christos 1320 1.1 christos mov_w_predec_to_reg16: ; pre-decrement from mem to register 1321 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1322 1.1 christos set_ccr_zero 1323 1.1 christos 1324 1.1 christos ;; mov.w @-ers, rd 1325 1.1 christos 1326 1.1 christos mov.l #word_src+2, er1 1327 1.1 christos mov.w @-er1, r0 ; Register pre-decr operand 1328 1.1 christos ;;; .word 0x0153 1329 1.1 christos ;;; .word 0x6d10 1330 1.1 christos 1331 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1332 1.1 christos test_neg_clear 1333 1.1 christos test_zero_clear 1334 1.1 christos test_ovf_clear 1335 1.1 christos test_carry_clear 1336 1.1 christos 1337 1.1 christos test_h_gr32 0xa5a57777 er0 1338 1.1 christos 1339 1.1 christos test_h_gr32 word_src, er1 1340 1.1 christos test_gr_a5a5 2 ; Make sure other general regs not disturbed 1341 1.1 christos test_gr_a5a5 3 1342 1.1 christos test_gr_a5a5 4 1343 1.1 christos test_gr_a5a5 5 1344 1.1 christos test_gr_a5a5 6 1345 1.1 christos test_gr_a5a5 7 1346 1.1 christos 1347 1.1 christos 1348 1.1 christos mov_w_disp2_to_reg16: 1349 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1350 1.1 christos set_ccr_zero 1351 1.1 christos 1352 1.1 christos ;; mov.w @(dd:2, ers), rd 1353 1.1 christos mov.l #word_src-2, er1 1354 1.1 christos mov.w @(2:2, er1), r0 ; Register plus 2-bit disp. operand 1355 1.1 christos ;;; .word 0x0151 1356 1.1 christos ;;; .word 0x6910 1357 1.1 christos 1358 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1359 1.1 christos test_neg_clear 1360 1.1 christos test_zero_clear 1361 1.1 christos test_ovf_clear 1362 1.1 christos test_carry_clear 1363 1.1 christos 1364 1.1 christos test_h_gr32 0xa5a57777 er0 ; mov result: a5a5 | 7777 1365 1.1 christos 1366 1.1 christos test_h_gr32 word_src-2, er1 1367 1.1 christos test_gr_a5a5 2 ; Make sure other general regs not disturbed 1368 1.1 christos test_gr_a5a5 3 1369 1.1 christos test_gr_a5a5 4 1370 1.1 christos test_gr_a5a5 5 1371 1.1 christos test_gr_a5a5 6 1372 1.1 christos test_gr_a5a5 7 1373 1.1 christos .endif 1374 1.1 christos 1375 1.1 christos mov_w_disp16_to_reg16: 1376 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1377 1.1 christos set_ccr_zero 1378 1.1 christos 1379 1.1 christos ;; mov.w @(dd:16, ers), rd 1380 1.1 christos mov.l #word_src+0x1234, er1 1381 1.1 christos mov.w @(-0x1234:16, er1), r0 ; Register plus 16-bit disp. operand 1382 1.1 christos ;;; .word 0x6f10 1383 1.1 christos ;;; .word -0x1234 1384 1.1 christos 1385 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1386 1.1 christos test_neg_clear 1387 1.1 christos test_zero_clear 1388 1.1 christos test_ovf_clear 1389 1.1 christos test_carry_clear 1390 1.1 christos 1391 1.1 christos test_h_gr32 0xa5a57777 er0 ; mov result: a5a5 | 7777 1392 1.1 christos 1393 1.1 christos test_h_gr32 word_src+0x1234, er1 1394 1.1 christos test_gr_a5a5 2 ; Make sure other general regs not disturbed 1395 1.1 christos test_gr_a5a5 3 1396 1.1 christos test_gr_a5a5 4 1397 1.1 christos test_gr_a5a5 5 1398 1.1 christos test_gr_a5a5 6 1399 1.1 christos test_gr_a5a5 7 1400 1.1 christos 1401 1.1 christos mov_w_disp32_to_reg16: 1402 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1403 1.1 christos set_ccr_zero 1404 1.1 christos 1405 1.1 christos ;; mov.w @(dd:32, ers), rd 1406 1.1 christos mov.l #word_src+65536, er1 1407 1.1 christos mov.w @(-65536:32, er1), r0 ; Register plus 32-bit disp. operand 1408 1.1 christos ;;; .word 0x7810 1409 1.1 christos ;;; .word 0x6b20 1410 1.1 christos ;;; .long -65536 1411 1.1 christos 1412 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1413 1.1 christos test_neg_clear 1414 1.1 christos test_zero_clear 1415 1.1 christos test_ovf_clear 1416 1.1 christos test_carry_clear 1417 1.1 christos 1418 1.1 christos test_h_gr32 0xa5a57777 er0 ; mov result: a5a5 | 7777 1419 1.1 christos 1420 1.1 christos test_h_gr32 word_src+65536, er1 1421 1.1 christos test_gr_a5a5 2 ; Make sure other general regs not disturbed 1422 1.1 christos test_gr_a5a5 3 1423 1.1 christos test_gr_a5a5 4 1424 1.1 christos test_gr_a5a5 5 1425 1.1 christos test_gr_a5a5 6 1426 1.1 christos test_gr_a5a5 7 1427 1.1 christos 1428 1.1 christos mov_w_abs16_to_reg16: 1429 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1430 1.1 christos set_ccr_zero 1431 1.1 christos 1432 1.1 christos ;; mov.w @aa:16, rd 1433 1.1 christos mov.w @word_src:16, r0 ; 16-bit address-direct operand 1434 1.1 christos ;;; .word 0x6b00 1435 1.1 christos ;;; .word @word_src 1436 1.1 christos 1437 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1438 1.1 christos test_neg_clear 1439 1.1 christos test_zero_clear 1440 1.1 christos test_ovf_clear 1441 1.1 christos test_carry_clear 1442 1.1 christos 1443 1.1 christos test_h_gr32 0xa5a57777 er0 1444 1.1 christos 1445 1.1 christos test_gr_a5a5 1 ; Make sure other general regs not disturbed 1446 1.1 christos test_gr_a5a5 2 1447 1.1 christos test_gr_a5a5 3 1448 1.1 christos test_gr_a5a5 4 1449 1.1 christos test_gr_a5a5 5 1450 1.1 christos test_gr_a5a5 6 1451 1.1 christos test_gr_a5a5 7 1452 1.1 christos 1453 1.1 christos mov_w_abs32_to_reg16: 1454 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1455 1.1 christos set_ccr_zero 1456 1.1 christos 1457 1.1 christos ;; mov.w @aa:32, rd 1458 1.1 christos mov.w @word_src:32, r0 ; 32-bit address-direct operand 1459 1.1 christos ;;; .word 0x6b20 1460 1.1 christos ;;; .long @word_src 1461 1.1 christos 1462 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1463 1.1 christos test_neg_clear 1464 1.1 christos test_zero_clear 1465 1.1 christos test_ovf_clear 1466 1.1 christos test_carry_clear 1467 1.1 christos 1468 1.1 christos test_h_gr32 0xa5a57777 er0 1469 1.1 christos 1470 1.1 christos test_gr_a5a5 1 ; Make sure other general regs not disturbed 1471 1.1 christos test_gr_a5a5 2 1472 1.1 christos test_gr_a5a5 3 1473 1.1 christos test_gr_a5a5 4 1474 1.1 christos test_gr_a5a5 5 1475 1.1 christos test_gr_a5a5 6 1476 1.1 christos test_gr_a5a5 7 1477 1.1 christos 1478 1.1 christos .if (sim_cpu == h8sx) 1479 1.1 christos 1480 1.1 christos ;; 1481 1.1 christos ;; Move word from memory to memory 1482 1.1 christos ;; 1483 1.1 christos 1484 1.1 christos mov_w_indirect_to_indirect: ; reg indirect, memory to memory 1485 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1486 1.1 christos set_ccr_zero 1487 1.1 christos 1488 1.1 christos ;; mov.w @ers, @erd 1489 1.1 christos 1490 1.1 christos mov.l #word_src, er1 1491 1.1 christos mov.l #word_dst, er0 1492 1.1 christos mov.w @er1, @er0 1493 1.1 christos ;;; .word 0x0158 1494 1.1 christos ;;; .word 0x0100 1495 1.1 christos 1496 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1497 1.1 christos test_neg_clear 1498 1.1 christos test_zero_clear 1499 1.1 christos test_ovf_clear 1500 1.1 christos test_carry_clear 1501 1.1 christos 1502 1.1 christos ;; Verify the affected registers. 1503 1.1 christos 1504 1.1 christos test_h_gr32 word_dst er0 1505 1.1 christos test_h_gr32 word_src er1 1506 1.1 christos test_gr_a5a5 2 ; Make sure other general regs not disturbed 1507 1.1 christos test_gr_a5a5 3 1508 1.1 christos test_gr_a5a5 4 1509 1.1 christos test_gr_a5a5 5 1510 1.1 christos test_gr_a5a5 6 1511 1.1 christos test_gr_a5a5 7 1512 1.1 christos 1513 1.1 christos ;; Now check the result of the move to memory. 1514 1.1 christos cmp.w @word_src, @word_dst 1515 1.1 christos beq .Lnext56 1516 1.1 christos fail 1517 1.1 christos .Lnext56: 1518 1.1 christos ;; Now clear the destination location, and verify that. 1519 1.1 christos mov.w #0, @word_dst 1520 1.1 christos cmp.w @word_src, @word_dst 1521 1.1 christos bne .Lnext57 1522 1.1 christos fail 1523 1.1 christos .Lnext57: ; OK, pass on. 1524 1.1 christos 1525 1.1 christos mov_w_postinc_to_postinc: ; reg post-increment, memory to memory 1526 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1527 1.1 christos set_ccr_zero 1528 1.1 christos 1529 1.1 christos ;; mov.w @ers+, @erd+ 1530 1.1 christos 1531 1.1 christos mov.l #word_src, er1 1532 1.1 christos mov.l #word_dst, er0 1533 1.1 christos mov.w @er1+, @er0+ 1534 1.1 christos ;;; .word 0x0158 1535 1.1 christos ;;; .word 0x8180 1536 1.1 christos 1537 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1538 1.1 christos test_neg_clear 1539 1.1 christos test_zero_clear 1540 1.1 christos test_ovf_clear 1541 1.1 christos test_carry_clear 1542 1.1 christos 1543 1.1 christos ;; Verify the affected registers. 1544 1.1 christos 1545 1.1 christos test_h_gr32 word_dst+2 er0 1546 1.1 christos test_h_gr32 word_src+2 er1 1547 1.1 christos test_gr_a5a5 2 ; Make sure other general regs not disturbed 1548 1.1 christos test_gr_a5a5 3 1549 1.1 christos test_gr_a5a5 4 1550 1.1 christos test_gr_a5a5 5 1551 1.1 christos test_gr_a5a5 6 1552 1.1 christos test_gr_a5a5 7 1553 1.1 christos 1554 1.1 christos ;; Now check the result of the move to memory. 1555 1.1 christos cmp.w @word_src, @word_dst 1556 1.1 christos beq .Lnext65 1557 1.1 christos fail 1558 1.1 christos .Lnext65: 1559 1.1 christos ;; Now clear the destination location, and verify that. 1560 1.1 christos mov.w #0, @word_dst 1561 1.1 christos cmp.w @word_src, @word_dst 1562 1.1 christos bne .Lnext66 1563 1.1 christos fail 1564 1.1 christos .Lnext66: ; OK, pass on. 1565 1.1 christos ;; special case same register 1566 1.1 christos mov.l #word_src, er0 1567 1.1 christos mov.w @er0+, @er0+ ; copying word_src to word_dst 1568 1.1 christos test_h_gr32 word_src+4 er0 1569 1.1 christos cmp.w @word_src, @word_dst 1570 1.1 christos beq .Lnext67 1571 1.1 christos fail 1572 1.1 christos .Lnext67: 1573 1.1 christos ;; Now clear the destination location, and verify that. 1574 1.1 christos mov.w #0, @word_dst 1575 1.1 christos cmp.b @word_src, @word_dst 1576 1.1 christos bne .Lnext68 1577 1.1 christos fail 1578 1.1 christos .Lnext68: 1579 1.1 christos 1580 1.1 christos mov_w_postdec_to_postdec: ; reg post-decrement, memory to memory 1581 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1582 1.1 christos set_ccr_zero 1583 1.1 christos 1584 1.1 christos ;; mov.w @ers-, @erd- 1585 1.1 christos 1586 1.1 christos mov.l #word_src, er1 1587 1.1 christos mov.l #word_dst, er0 1588 1.1 christos mov.w @er1-, @er0- 1589 1.1 christos ;;; .word 0x0158 1590 1.1 christos ;;; .word 0xa1a0 1591 1.1 christos 1592 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1593 1.1 christos test_neg_clear 1594 1.1 christos test_zero_clear 1595 1.1 christos test_ovf_clear 1596 1.1 christos test_carry_clear 1597 1.1 christos 1598 1.1 christos ;; Verify the affected registers. 1599 1.1 christos 1600 1.1 christos test_h_gr32 word_dst-2 er0 1601 1.1 christos test_h_gr32 word_src-2 er1 1602 1.1 christos test_gr_a5a5 2 ; Make sure other general regs not disturbed 1603 1.1 christos test_gr_a5a5 3 1604 1.1 christos test_gr_a5a5 4 1605 1.1 christos test_gr_a5a5 5 1606 1.1 christos test_gr_a5a5 6 1607 1.1 christos test_gr_a5a5 7 1608 1.1 christos 1609 1.1 christos ;; Now check the result of the move to memory. 1610 1.1 christos cmp.w @word_src, @word_dst 1611 1.1 christos beq .Lnext75 1612 1.1 christos fail 1613 1.1 christos .Lnext75: 1614 1.1 christos ;; Now clear the destination location, and verify that. 1615 1.1 christos mov.w #0, @word_dst 1616 1.1 christos cmp.w @word_src, @word_dst 1617 1.1 christos bne .Lnext76 1618 1.1 christos fail 1619 1.1 christos .Lnext76: ; OK, pass on. 1620 1.1 christos ;; special case same register 1621 1.1 christos mov.l #word_src, er0 1622 1.1 christos mov.w @er0-, @er0- ; copying word_src to word_dst_dec 1623 1.1 christos test_h_gr32 word_src-4 er0 1624 1.1 christos cmp.w @word_src, @word_dst_dec 1625 1.1 christos beq .Lnext77 1626 1.1 christos fail 1627 1.1 christos .Lnext77: 1628 1.1 christos ;; Now clear the destination location, and verify that. 1629 1.1 christos mov.w #0, @word_dst_dec 1630 1.1 christos cmp.w @word_src, @word_dst_dec 1631 1.1 christos bne .Lnext78 1632 1.1 christos fail 1633 1.1 christos .Lnext78: 1634 1.1 christos 1635 1.1 christos mov_w_preinc_to_preinc: ; reg pre-increment, memory to memory 1636 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1637 1.1 christos set_ccr_zero 1638 1.1 christos 1639 1.1 christos ;; mov.w @+ers, @+erd 1640 1.1 christos 1641 1.1 christos mov.l #word_src-2, er1 1642 1.1 christos mov.l #word_dst-2, er0 1643 1.1 christos mov.w @+er1, @+er0 1644 1.1 christos ;;; .word 0x0158 1645 1.1 christos ;;; .word 0x9190 1646 1.1 christos 1647 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1648 1.1 christos test_neg_clear 1649 1.1 christos test_zero_clear 1650 1.1 christos test_ovf_clear 1651 1.1 christos test_carry_clear 1652 1.1 christos 1653 1.1 christos ;; Verify the affected registers. 1654 1.1 christos 1655 1.1 christos test_h_gr32 word_dst er0 1656 1.1 christos test_h_gr32 word_src er1 1657 1.1 christos test_gr_a5a5 2 ; Make sure other general regs not disturbed 1658 1.1 christos test_gr_a5a5 3 1659 1.1 christos test_gr_a5a5 4 1660 1.1 christos test_gr_a5a5 5 1661 1.1 christos test_gr_a5a5 6 1662 1.1 christos test_gr_a5a5 7 1663 1.1 christos 1664 1.1 christos ;; Now check the result of the move to memory. 1665 1.1 christos cmp.w @word_src, @word_dst 1666 1.1 christos beq .Lnext85 1667 1.1 christos fail 1668 1.1 christos .Lnext85: 1669 1.1 christos ;; Now clear the destination location, and verify that. 1670 1.1 christos mov.w #0, @word_dst 1671 1.1 christos cmp.w @word_src, @word_dst 1672 1.1 christos bne .Lnext86 1673 1.1 christos fail 1674 1.1 christos .Lnext86: ; OK, pass on. 1675 1.1 christos ;; special case same register 1676 1.1 christos mov.l #word_src-2, er0 1677 1.1 christos mov.w @+er0, @+er0 ; copying word_src to word_dst 1678 1.1 christos test_h_gr32 word_src+2 er0 1679 1.1 christos cmp.w @word_src, @word_dst 1680 1.1 christos beq .Lnext87 1681 1.1 christos fail 1682 1.1 christos .Lnext87: 1683 1.1 christos ;; Now clear the destination location, and verify that. 1684 1.1 christos mov.w #0, @word_dst 1685 1.1 christos cmp.w @word_src, @word_dst 1686 1.1 christos bne .Lnext88 1687 1.1 christos fail 1688 1.1 christos .Lnext88: 1689 1.1 christos 1690 1.1 christos mov_w_predec_to_predec: ; reg pre-decrement, memory to memory 1691 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1692 1.1 christos set_ccr_zero 1693 1.1 christos 1694 1.1 christos ;; mov.w @-ers, @-erd 1695 1.1 christos 1696 1.1 christos mov.l #word_src+2, er1 1697 1.1 christos mov.l #word_dst+2, er0 1698 1.1 christos mov.w @-er1, @-er0 1699 1.1 christos ;;; .word 0x0158 1700 1.1 christos ;;; .word 0xb1b0 1701 1.1 christos 1702 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1703 1.1 christos test_neg_clear 1704 1.1 christos test_zero_clear 1705 1.1 christos test_ovf_clear 1706 1.1 christos test_carry_clear 1707 1.1 christos 1708 1.1 christos ;; Verify the affected registers. 1709 1.1 christos 1710 1.1 christos test_h_gr32 word_dst er0 1711 1.1 christos test_h_gr32 word_src er1 1712 1.1 christos test_gr_a5a5 2 ; Make sure other general regs not disturbed 1713 1.1 christos test_gr_a5a5 3 1714 1.1 christos test_gr_a5a5 4 1715 1.1 christos test_gr_a5a5 5 1716 1.1 christos test_gr_a5a5 6 1717 1.1 christos test_gr_a5a5 7 1718 1.1 christos 1719 1.1 christos ;; Now check the result of the move to memory. 1720 1.1 christos cmp.w @word_src, @word_dst 1721 1.1 christos beq .Lnext95 1722 1.1 christos fail 1723 1.1 christos .Lnext95: 1724 1.1 christos ;; Now clear the destination location, and verify that. 1725 1.1 christos mov.w #0, @word_dst 1726 1.1 christos cmp.w @word_src, @word_dst 1727 1.1 christos bne .Lnext96 1728 1.1 christos fail 1729 1.1 christos .Lnext96: ; OK, pass on. 1730 1.1 christos ;; special case same register 1731 1.1 christos mov.l #word_src+2, er0 1732 1.1 christos mov.w @-er0, @-er0 ; copying word_src to word_dst_dec 1733 1.1 christos test_h_gr32 word_src-2 er0 1734 1.1 christos cmp.w @word_src, @word_dst_dec 1735 1.1 christos beq .Lnext97 1736 1.1 christos fail 1737 1.1 christos .Lnext97: 1738 1.1 christos ;; Now clear the destination location, and verify that. 1739 1.1 christos mov.w #0, @word_dst_dec 1740 1.1 christos cmp.w @word_src, @word_dst_dec 1741 1.1 christos bne .Lnext98 1742 1.1 christos fail 1743 1.1 christos .Lnext98: 1744 1.1 christos 1745 1.1 christos mov_w_disp2_to_disp2: ; reg 2-bit disp, memory to memory 1746 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1747 1.1 christos set_ccr_zero 1748 1.1 christos 1749 1.1 christos ;; mov.w @(dd:2, ers), @(dd:2, erd) 1750 1.1 christos 1751 1.1 christos mov.l #word_src-2, er1 1752 1.1 christos mov.l #word_dst-4, er0 1753 1.1 christos mov.w @(2:2, er1), @(4:2, er0) 1754 1.1 christos ;;; .word 0x0158 1755 1.1 christos ;;; .word 0x1120 1756 1.1 christos 1757 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1758 1.1 christos test_neg_clear 1759 1.1 christos test_zero_clear 1760 1.1 christos test_ovf_clear 1761 1.1 christos test_carry_clear 1762 1.1 christos 1763 1.1 christos ;; Verify the affected registers. 1764 1.1 christos 1765 1.1 christos test_h_gr32 word_dst-4 er0 1766 1.1 christos test_h_gr32 word_src-2 er1 1767 1.1 christos test_gr_a5a5 2 ; Make sure other general regs not disturbed 1768 1.1 christos test_gr_a5a5 3 1769 1.1 christos test_gr_a5a5 4 1770 1.1 christos test_gr_a5a5 5 1771 1.1 christos test_gr_a5a5 6 1772 1.1 christos test_gr_a5a5 7 1773 1.1 christos 1774 1.1 christos ;; Now check the result of the move to memory. 1775 1.1 christos cmp.w @word_src, @word_dst 1776 1.1 christos beq .Lnext105 1777 1.1 christos fail 1778 1.1 christos .Lnext105: 1779 1.1 christos ;; Now clear the destination location, and verify that. 1780 1.1 christos mov.w #0, @word_dst 1781 1.1 christos cmp.w @word_src, @word_dst 1782 1.1 christos bne .Lnext106 1783 1.1 christos fail 1784 1.1 christos .Lnext106: ; OK, pass on. 1785 1.1 christos 1786 1.1 christos mov_w_disp16_to_disp16: ; reg 16-bit disp, memory to memory 1787 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1788 1.1 christos set_ccr_zero 1789 1.1 christos 1790 1.1 christos ;; mov.w @(dd:16, ers), @(dd:16, erd) 1791 1.1 christos 1792 1.1 christos mov.l #word_src-1, er1 1793 1.1 christos mov.l #word_dst-2, er0 1794 1.1 christos mov.w @(1:16, er1), @(2:16, er0) 1795 1.1 christos ;;; .word 0x0158 1796 1.1 christos ;;; .word 0xc1c0 1797 1.1 christos ;;; .word 0x0001 1798 1.1 christos ;;; .word 0x0002 1799 1.1 christos 1800 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1801 1.1 christos test_neg_clear 1802 1.1 christos test_zero_clear 1803 1.1 christos test_ovf_clear 1804 1.1 christos test_carry_clear 1805 1.1 christos 1806 1.1 christos ;; Verify the affected registers. 1807 1.1 christos 1808 1.1 christos test_h_gr32 word_dst-2 er0 1809 1.1 christos test_h_gr32 word_src-1 er1 1810 1.1 christos test_gr_a5a5 2 ; Make sure other general regs not disturbed 1811 1.1 christos test_gr_a5a5 3 1812 1.1 christos test_gr_a5a5 4 1813 1.1 christos test_gr_a5a5 5 1814 1.1 christos test_gr_a5a5 6 1815 1.1 christos test_gr_a5a5 7 1816 1.1 christos 1817 1.1 christos ;; Now check the result of the move to memory. 1818 1.1 christos cmp.w @word_src, @word_dst 1819 1.1 christos beq .Lnext115 1820 1.1 christos fail 1821 1.1 christos .Lnext115: 1822 1.1 christos ;; Now clear the destination location, and verify that. 1823 1.1 christos mov.w #0, @word_dst 1824 1.1 christos cmp.w @word_src, @word_dst 1825 1.1 christos bne .Lnext116 1826 1.1 christos fail 1827 1.1 christos .Lnext116: ; OK, pass on. 1828 1.1 christos 1829 1.1 christos mov_w_disp32_to_disp32: ; reg 32-bit disp, memory to memory 1830 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1831 1.1 christos set_ccr_zero 1832 1.1 christos 1833 1.1 christos ;; mov.w @(dd:32, ers), @(dd:32, erd) 1834 1.1 christos 1835 1.1 christos mov.l #word_src-1, er1 1836 1.1 christos mov.l #word_dst-2, er0 1837 1.1 christos mov.w @(1:32, er1), @(2:32, er0) 1838 1.1 christos ;;; .word 0x0158 1839 1.1 christos ;;; .word 0xc9c8 1840 1.1 christos ;;; .long 1 1841 1.1 christos ;;; .long 2 1842 1.1 christos 1843 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1844 1.1 christos test_neg_clear 1845 1.1 christos test_zero_clear 1846 1.1 christos test_ovf_clear 1847 1.1 christos test_carry_clear 1848 1.1 christos 1849 1.1 christos ;; Verify the affected registers. 1850 1.1 christos 1851 1.1 christos test_h_gr32 word_dst-2 er0 1852 1.1 christos test_h_gr32 word_src-1 er1 1853 1.1 christos test_gr_a5a5 2 ; Make sure other general regs not disturbed 1854 1.1 christos test_gr_a5a5 3 1855 1.1 christos test_gr_a5a5 4 1856 1.1 christos test_gr_a5a5 5 1857 1.1 christos test_gr_a5a5 6 1858 1.1 christos test_gr_a5a5 7 1859 1.1 christos 1860 1.1 christos ;; Now check the result of the move to memory. 1861 1.1 christos cmp.w @word_src, @word_dst 1862 1.1 christos beq .Lnext125 1863 1.1 christos fail 1864 1.1 christos .Lnext125: 1865 1.1 christos ;; Now clear the destination location, and verify that. 1866 1.1 christos mov.w #0, @word_dst 1867 1.1 christos cmp.w @word_src, @word_dst 1868 1.1 christos bne .Lnext126 1869 1.1 christos fail 1870 1.1 christos .Lnext126: ; OK, pass on. 1871 1.1 christos 1872 1.1 christos mov_w_abs16_to_abs16: ; 16-bit absolute addr, memory to memory 1873 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1874 1.1 christos set_ccr_zero 1875 1.1 christos 1876 1.1 christos ;; mov.w @aa:16, @aa:16 1877 1.1 christos 1878 1.1 christos mov.w @word_src:16, @word_dst:16 1879 1.1 christos ;;; .word 0x0158 1880 1.1 christos ;;; .word 0x4040 1881 1.1 christos ;;; .word @word_src 1882 1.1 christos ;;; .word @word_dst 1883 1.1 christos 1884 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1885 1.1 christos test_neg_clear 1886 1.1 christos test_zero_clear 1887 1.1 christos test_ovf_clear 1888 1.1 christos test_carry_clear 1889 1.1 christos 1890 1.1 christos 1891 1.1 christos test_gr_a5a5 0 ; Make sure *NO* general registers are changed 1892 1.1 christos test_gr_a5a5 1 1893 1.1 christos test_gr_a5a5 2 1894 1.1 christos test_gr_a5a5 3 1895 1.1 christos test_gr_a5a5 4 1896 1.1 christos test_gr_a5a5 5 1897 1.1 christos test_gr_a5a5 6 1898 1.1 christos test_gr_a5a5 7 1899 1.1 christos 1900 1.1 christos ;; Now check the result of the move to memory. 1901 1.1 christos cmp.w @word_src, @word_dst 1902 1.1 christos beq .Lnext135 1903 1.1 christos fail 1904 1.1 christos .Lnext135: 1905 1.1 christos ;; Now clear the destination location, and verify that. 1906 1.1 christos mov.w #0, @word_dst 1907 1.1 christos cmp.w @word_src, @word_dst 1908 1.1 christos bne .Lnext136 1909 1.1 christos fail 1910 1.1 christos .Lnext136: ; OK, pass on. 1911 1.1 christos 1912 1.1 christos mov_w_abs32_to_abs32: ; 32-bit absolute addr, memory to memory 1913 1.1 christos set_grs_a5a5 ; Fill all general regs with a fixed pattern 1914 1.1 christos set_ccr_zero 1915 1.1 christos 1916 1.1 christos ;; mov.w @aa:32, @aa:32 1917 1.1 christos 1918 1.1 christos mov.w @word_src:32, @word_dst:32 1919 1.1 christos ;;; .word 0x0158 1920 1.1 christos ;;; .word 0x4848 1921 1.1 christos ;;; .long @word_src 1922 1.1 christos ;;; .long @word_dst 1923 1.1 christos 1924 1.1 christos ;; test ccr ; H=0 N=0 Z=0 V=0 C=0 1925 1.1 christos test_neg_clear 1926 1.1 christos test_zero_clear 1927 1.1 christos test_ovf_clear 1928 1.1 christos test_carry_clear 1929 1.1 christos 1930 1.1 christos test_gr_a5a5 0 ; Make sure *NO* general registers are changed 1931 1.1 christos test_gr_a5a5 1 1932 1.1 christos test_gr_a5a5 2 1933 1.1 christos test_gr_a5a5 3 1934 1.1 christos test_gr_a5a5 4 1935 1.1 christos test_gr_a5a5 5 1936 1.1 christos test_gr_a5a5 6 1937 1.1 christos test_gr_a5a5 7 1938 1.1 christos 1939 1.1 christos ;; Now check the result of the move to memory. 1940 1.1 christos cmp.w @word_src, @word_dst 1941 1.1 christos beq .Lnext145 1942 1.1 christos fail 1943 1.1 christos .Lnext145: 1944 1.1 christos ;; Now clear the destination location, and verify that. 1945 1.1 christos mov.w #0, @word_dst 1946 1.1 christos cmp.w @word_src, @word_dst 1947 1.1 christos bne .Lnext146 1948 1.1 christos fail 1949 1.1 christos .Lnext146: ; OK, pass on. 1950 1.1 christos 1951 1.1 christos 1952 1.1 christos .endif 1953 1.1 christos 1954 1.1 christos pass 1955 1.1 christos 1956 1.1 christos exit 0 1957