orb.s 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579
  1. # Hitachi H8 testcase 'or.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. .include "testutils.inc"
  11. # Instructions tested:
  12. # or.b #xx:8, rd ; c rd xxxxxxxx
  13. # or.b #xx:8, @erd ; 7 d rd ???? c ???? xxxxxxxx
  14. # or.b #xx:8, @erd+ ; 0 1 7 4 6 c rd 1??? c ???? xxxxxxxx
  15. # or.b #xx:8, @erd- ; 0 1 7 6 6 c rd 1??? c ???? xxxxxxxx
  16. # or.b #xx:8, @+erd ; 0 1 7 5 6 c rd 1??? c ???? xxxxxxxx
  17. # or.b #xx:8, @-erd ; 0 1 7 7 6 c rd 1??? c ???? xxxxxxxx
  18. # or.b rs, rd ; 1 4 rs rd
  19. # or.b reg8, @erd ; 7 d rd ???? 1 4 rs ????
  20. # or.b reg8, @erd+ ; 0 1 7 9 8 rd 4 rs
  21. # or.b reg8, @erd- ; 0 1 7 9 a rd 4 rs
  22. # or.b reg8, @+erd ; 0 1 7 9 9 rd 4 rs
  23. # or.b reg8, @-erd ; 0 1 7 9 b rd 4 rs
  24. #
  25. # orc #xx:8, ccr
  26. # orc #xx:8, exr
  27. # Coming soon:
  28. # ...
  29. .data
  30. pre_byte: .byte 0
  31. byte_dest: .byte 0xa5
  32. post_byte: .byte 0
  33. start
  34. or_b_imm8_reg8:
  35. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  36. ;; fixme set ccr
  37. ;; or.b #xx:8,Rd
  38. or.b #0xaa, r0l ; Immediate 8-bit src, reg8 dest
  39. ;; fixme test ccr ; H=0 N=1 Z=0 V=0 C=0
  40. test_h_gr16 0xa5af r0 ; or result: a5 | aa
  41. .if (sim_cpu) ; non-zero means h8300h, s, or sx
  42. test_h_gr32 0xa5a5a5af er0 ; or result: a5 | aa
  43. .endif
  44. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  45. test_gr_a5a5 2
  46. test_gr_a5a5 3
  47. test_gr_a5a5 4
  48. test_gr_a5a5 5
  49. test_gr_a5a5 6
  50. test_gr_a5a5 7
  51. .if (sim_cpu == h8sx)
  52. or_b_imm8_rdind:
  53. mov #byte_dest, er0
  54. mov.b #0xa5, r1l
  55. mov.b r1l, @er0
  56. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  57. set_ccr_zero
  58. ;; or.b #xx:8,@eRd
  59. mov #byte_dest, er0
  60. or.b #0xaa:8, @er0 ; Immediate 8-bit src, reg indirect dst
  61. ;;; .word 0x7d00
  62. ;;; .word 0xc0aa
  63. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  64. test_ovf_clear
  65. test_zero_clear
  66. test_neg_set
  67. test_h_gr32 byte_dest, er0 ; er0 still contains address
  68. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  69. test_gr_a5a5 2
  70. test_gr_a5a5 3
  71. test_gr_a5a5 4
  72. test_gr_a5a5 5
  73. test_gr_a5a5 6
  74. test_gr_a5a5 7
  75. ;; Now check the result of the or to memory.
  76. sub.b r0l, r0l
  77. mov.b @byte_dest, r0l
  78. cmp.b #0xaf, r0l
  79. beq .L1
  80. fail
  81. .L1:
  82. or_b_imm8_rdpostinc:
  83. mov #byte_dest, er0
  84. mov.b #0xa5, r1l
  85. mov.b r1l, @er0
  86. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  87. set_ccr_zero
  88. ;; or.b #xx:8,@eRd+
  89. mov #byte_dest, er0
  90. or.b #0x55:8, @er0+ ; Immediate 8-bit src, reg post-incr dest
  91. ;;; .word 0x0174
  92. ;;; .word 0x6c08
  93. ;;; .word 0xc055
  94. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  95. test_ovf_clear
  96. test_zero_clear
  97. test_neg_set
  98. test_h_gr32 post_byte, er0 ; er0 contains address plus one
  99. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  100. test_gr_a5a5 2
  101. test_gr_a5a5 3
  102. test_gr_a5a5 4
  103. test_gr_a5a5 5
  104. test_gr_a5a5 6
  105. test_gr_a5a5 7
  106. ;; Now check the result of the or to memory.
  107. sub.b r0l, r0l
  108. mov.b @byte_dest, r0l
  109. cmp.b #0xf5, r0l
  110. beq .L2
  111. fail
  112. .L2:
  113. or_b_imm8_rdpostdec:
  114. mov #byte_dest, er0
  115. mov.b #0xa5, r1l
  116. mov.b r1l, @er0
  117. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  118. set_ccr_zero
  119. ;; or.b #xx:8,@eRd-
  120. mov #byte_dest, er0
  121. or.b #0xaa:8, @er0- ; Immediate 8-bit src, reg post-decr dest
  122. ;;; .word 0x0176
  123. ;;; .word 0x6c08
  124. ;;; .word 0xc0aa
  125. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  126. test_ovf_clear
  127. test_zero_clear
  128. test_neg_set
  129. test_h_gr32 pre_byte, er0 ; er0 contains address minus one
  130. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  131. test_gr_a5a5 2
  132. test_gr_a5a5 3
  133. test_gr_a5a5 4
  134. test_gr_a5a5 5
  135. test_gr_a5a5 6
  136. test_gr_a5a5 7
  137. ;; Now check the result of the or to memory.
  138. sub.b r0l, r0l
  139. mov.b @byte_dest, r0l
  140. cmp.b #0xaf, r0l
  141. beq .L3
  142. fail
  143. .L3:
  144. or_b_imm8_rdpreinc:
  145. mov #byte_dest, er0
  146. mov.b #0xa5, r1l
  147. mov.b r1l, @er0
  148. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  149. set_ccr_zero
  150. ;; or.b #xx:8,@+eRd
  151. mov #pre_byte, er0
  152. or.b #0x55:8, @+er0 ; Immediate 8-bit src, reg pre-incr dest
  153. ;;; .word 0x0175
  154. ;;; .word 0x6c08
  155. ;;; .word 0xc055
  156. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  157. test_ovf_clear
  158. test_zero_clear
  159. test_neg_set
  160. test_h_gr32 byte_dest, er0 ; er0 contains destination address
  161. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  162. test_gr_a5a5 2
  163. test_gr_a5a5 3
  164. test_gr_a5a5 4
  165. test_gr_a5a5 5
  166. test_gr_a5a5 6
  167. test_gr_a5a5 7
  168. ;; Now check the result of the or to memory.
  169. sub.b r0l, r0l
  170. mov.b @byte_dest, r0l
  171. cmp.b #0xf5, r0l
  172. beq .L4
  173. fail
  174. .L4:
  175. or_b_imm8_rdpredec:
  176. mov #byte_dest, er0
  177. mov.b #0xa5, r1l
  178. mov.b r1l, @er0
  179. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  180. set_ccr_zero
  181. ;; or.b #xx:8,@-eRd
  182. mov #post_byte, er0
  183. or.b #0xaa:8, @-er0 ; Immediate 8-bit src, reg pre-decr dest
  184. ;;; .word 0x0177
  185. ;;; .word 0x6c08
  186. ;;; .word 0xc0aa
  187. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  188. test_ovf_clear
  189. test_zero_clear
  190. test_neg_set
  191. test_h_gr32 byte_dest, er0 ; er0 contains destination address
  192. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  193. test_gr_a5a5 2
  194. test_gr_a5a5 3
  195. test_gr_a5a5 4
  196. test_gr_a5a5 5
  197. test_gr_a5a5 6
  198. test_gr_a5a5 7
  199. ;; Now check the result of the or to memory.
  200. sub.b r0l, r0l
  201. mov.b @byte_dest, r0l
  202. cmp.b #0xaf, r0l
  203. beq .L5
  204. fail
  205. .L5:
  206. .endif
  207. or_b_reg8_reg8:
  208. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  209. ;; fixme set ccr
  210. ;; or.b Rs,Rd
  211. mov.b #0xaa, r0h
  212. or.b r0h, r0l ; Reg8 src, reg8 dest
  213. ;; fixme test ccr ; H=0 N=1 Z=0 V=0 C=0
  214. test_h_gr16 0xaaaf r0 ; or result: a5 | aa
  215. .if (sim_cpu) ; non-zero means h8300h, s, or sx
  216. test_h_gr32 0xa5a5aaaf er0 ; or result: a5 | aa
  217. .endif
  218. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  219. test_gr_a5a5 2
  220. test_gr_a5a5 3
  221. test_gr_a5a5 4
  222. test_gr_a5a5 5
  223. test_gr_a5a5 6
  224. test_gr_a5a5 7
  225. .if (sim_cpu == h8sx)
  226. or_b_reg8_rdind:
  227. mov #byte_dest, er0
  228. mov.b #0xa5, r1l
  229. mov.b r1l, @er0
  230. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  231. set_ccr_zero
  232. ;; or.b rs8,@eRd ; or reg8 to register indirect
  233. mov #byte_dest, er0
  234. mov #0xaa, r1l
  235. or.b r1l, @er0 ; reg8 src, reg indirect dest
  236. ;;; .word 0x7d00
  237. ;;; .word 0x1490
  238. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  239. test_ovf_clear
  240. test_zero_clear
  241. test_neg_set
  242. test_h_gr32 byte_dest er0 ; er0 still contains address
  243. test_h_gr32 0xa5a5a5aa er1 ; er1 has the test load
  244. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  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. ;; Now check the result of the or to memory.
  251. sub.b r0l, r0l
  252. mov.b @byte_dest, r0l
  253. cmp.b #0xaf, r0l
  254. beq .L6
  255. fail
  256. .L6:
  257. or_b_reg8_rdpostinc:
  258. mov #byte_dest, er0
  259. mov.b #0xa5, r1l
  260. mov.b r1l, @er0
  261. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  262. set_ccr_zero
  263. ;; or.b rs8,@eRd+ ; or reg8 to register indirect post-increment
  264. mov #byte_dest, er0
  265. mov #0x55, r1l
  266. or.b r1l, @er0+ ; reg8 src, reg post-incr dest
  267. ;;; .word 0x0179
  268. ;;; .word 0x8049
  269. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  270. test_ovf_clear
  271. test_zero_clear
  272. test_neg_set
  273. test_h_gr32 post_byte er0 ; er0 contains address plus one
  274. test_h_gr32 0xa5a5a555 er1 ; er1 has the test load
  275. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  276. test_gr_a5a5 3
  277. test_gr_a5a5 4
  278. test_gr_a5a5 5
  279. test_gr_a5a5 6
  280. test_gr_a5a5 7
  281. ;; Now check the result of the or to memory.
  282. sub.b r0l, r0l
  283. mov.b @byte_dest, r0l
  284. cmp.b #0xf5, r0l
  285. beq .L7
  286. fail
  287. .L7:
  288. ;; special case same register
  289. mov.l #byte_dest, er0
  290. mov.b r0l, r1l
  291. mov.b @er0, r1h
  292. or.b r0l, @er0+
  293. inc.b r1l
  294. or.b r1h, r1l
  295. mov.b @byte_dest, r0l
  296. cmp.b r1l, r0l
  297. beq .L27
  298. fail
  299. .L27:
  300. or_b_reg8_rdpostdec:
  301. mov #byte_dest, er0
  302. mov.b #0xa5, r1l
  303. mov.b r1l, @er0
  304. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  305. set_ccr_zero
  306. ;; or.b rs8,@eRd- ; or reg8 to register indirect post-decrement
  307. mov #byte_dest, er0
  308. mov #0xaa, r1l
  309. or.b r1l, @er0- ; reg8 src, reg post-decr dest
  310. ;;; .word 0x0179
  311. ;;; .word 0xa049
  312. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  313. test_ovf_clear
  314. test_zero_clear
  315. test_neg_set
  316. test_h_gr32 pre_byte er0 ; er0 contains address minus one
  317. test_h_gr32 0xa5a5a5aa er1 ; er1 has the test load
  318. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  319. test_gr_a5a5 3
  320. test_gr_a5a5 4
  321. test_gr_a5a5 5
  322. test_gr_a5a5 6
  323. test_gr_a5a5 7
  324. ;; Now check the result of the or to memory.
  325. sub.b r0l, r0l
  326. mov.b @byte_dest, r0l
  327. cmp.b #0xaf, r0l
  328. beq .L8
  329. fail
  330. .L8:
  331. ;; special case same register
  332. mov.l #byte_dest, er0
  333. mov.b r0l, r1l
  334. mov.b @er0, r1h
  335. or.b r0l, @er0-
  336. dec.b r1l
  337. or.b r1h, r1l
  338. mov.b @byte_dest, r0l
  339. cmp.b r1l, r0l
  340. beq .L28
  341. fail
  342. .L28:
  343. or_b_reg8_rdpreinc:
  344. mov #byte_dest, er0
  345. mov.b #0xa5, r1l
  346. mov.b r1l, @er0
  347. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  348. set_ccr_zero
  349. ;; or.b rs8,@+eRd ; or reg8 to register indirect pre-increment
  350. mov #pre_byte, er0
  351. mov #0x55, r1l
  352. or.b r1l, @+er0 ; reg8 src, reg pre-incr dest
  353. ;;; .word 0x0179
  354. ;;; .word 0x9049
  355. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  356. test_ovf_clear
  357. test_zero_clear
  358. test_neg_set
  359. test_h_gr32 byte_dest er0 ; er0 contains destination address
  360. test_h_gr32 0xa5a5a555 er1 ; er1 has the test load
  361. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  362. test_gr_a5a5 3
  363. test_gr_a5a5 4
  364. test_gr_a5a5 5
  365. test_gr_a5a5 6
  366. test_gr_a5a5 7
  367. ;; Now check the result of the or to memory.
  368. sub.b r0l, r0l
  369. mov.b @byte_dest, r0l
  370. cmp.b #0xf5, r0l
  371. beq .L9
  372. fail
  373. .L9:
  374. ;; special case same register
  375. mov.l #pre_byte, er0
  376. mov.b r0l, r1l
  377. mov.b @byte_dest, r1h
  378. or.b r0l, @+er0
  379. inc.b r1l
  380. or.b r1h, r1l
  381. mov.b @byte_dest, r0l
  382. cmp.b r1l, r0l
  383. beq .L29
  384. fail
  385. .L29:
  386. or_b_reg8_rdpredec:
  387. mov #byte_dest, er0
  388. mov.b #0xa5, r1l
  389. mov.b r1l, @er0
  390. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  391. set_ccr_zero
  392. ;; or.b rs8,@-eRd ; or reg8 to register indirect pre-decrement
  393. mov #post_byte, er0
  394. mov #0xaa, r1l
  395. or.b r1l, @-er0 ; reg8 src, reg pre-decr dest
  396. ;;; .word 0x0179
  397. ;;; .word 0xb049
  398. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  399. test_ovf_clear
  400. test_zero_clear
  401. test_neg_set
  402. test_h_gr32 byte_dest er0 ; er0 contains destination address
  403. test_h_gr32 0xa5a5a5aa er1 ; er1 has the test load
  404. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  405. test_gr_a5a5 3
  406. test_gr_a5a5 4
  407. test_gr_a5a5 5
  408. test_gr_a5a5 6
  409. test_gr_a5a5 7
  410. ;; Now check the result of the or to memory.
  411. sub.b r0l, r0l
  412. mov.b @byte_dest, r0l
  413. cmp.b #0xaf, r0l
  414. beq .L10
  415. fail
  416. .L10:
  417. ;; special case same register
  418. mov.l #post_byte, er0
  419. mov.b r0l, r1l
  420. mov.b @byte_dest, r1h
  421. or.b r0l, @-er0
  422. dec.b r1l
  423. or.b r1h, r1l
  424. mov.b @byte_dest, r0l
  425. cmp.b r1l, r0l
  426. beq .L30
  427. fail
  428. .L30:
  429. .endif
  430. orc_imm8_ccr:
  431. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  432. set_ccr_zero
  433. ;; orc #xx:8,ccr
  434. test_neg_clear
  435. orc #0x8, ccr ; Immediate 8-bit operand (neg flag)
  436. test_neg_set
  437. test_zero_clear
  438. orc #0x4, ccr ; Immediate 8-bit operand (zero flag)
  439. test_zero_set
  440. test_ovf_clear
  441. orc #0x2, ccr ; Immediate 8-bit operand (overflow flag)
  442. test_ovf_set
  443. test_carry_clear
  444. orc #0x1, ccr ; Immediate 8-bit operand (carry flag)
  445. test_carry_set
  446. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  447. test_gr_a5a5 1
  448. test_gr_a5a5 2
  449. test_gr_a5a5 3
  450. test_gr_a5a5 4
  451. test_gr_a5a5 5
  452. test_gr_a5a5 6
  453. test_gr_a5a5 7
  454. .if (sim_cpu == h8300s || sim_cpu == h8sx) ; Earlier versions, no exr
  455. orc_imm8_exr:
  456. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  457. ldc #0, exr
  458. stc exr, r0l
  459. test_h_gr8 0, r0l
  460. ;; orc #xx:8,exr
  461. orc #0x1, exr
  462. stc exr,r0l
  463. test_h_gr8 1, r0l
  464. orc #0x2, exr
  465. stc exr,r0l
  466. test_h_gr8 3, r0l
  467. orc #0x4, exr
  468. stc exr,r0l
  469. test_h_gr8 7, r0l
  470. orc #0x80, exr
  471. stc exr,r0l
  472. test_h_gr8 0x87, r0l
  473. test_h_gr32 0xa5a5a587 er0
  474. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  475. test_gr_a5a5 2
  476. test_gr_a5a5 3
  477. test_gr_a5a5 4
  478. test_gr_a5a5 5
  479. test_gr_a5a5 6
  480. test_gr_a5a5 7
  481. .endif ; not h8300 or h8300h
  482. pass
  483. exit 0