rotl.s 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212
  1. # Hitachi H8 testcase 'rotl'
  2. # mach(): h8300s h8sx
  3. # as(h8300): --defsym sim_cpu=0
  4. # as(h8300h): --defsym sim_cpu=1
  5. # as(h8300s): --defsym sim_cpu=2
  6. # as(h8sx): --defsym sim_cpu=3
  7. # ld(h8300h): -m h8300helf
  8. # ld(h8300s): -m h8300self
  9. # ld(h8sx): -m h8300sxelf
  10. .include "testutils.inc"
  11. start
  12. .data
  13. byte_dest: .byte 0xa5
  14. .align 2
  15. word_dest: .word 0xa5a5
  16. .align 4
  17. long_dest: .long 0xa5a5a5a5
  18. .text
  19. rotl_b_reg8_1:
  20. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  21. set_ccr_zero
  22. rotl.b r0l ; shift left arithmetic by one
  23. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  24. test_zero_clear
  25. test_ovf_clear
  26. test_neg_clear
  27. test_h_gr16 0xa54b r0 ; 1010 0101 -> 0100 1011
  28. .if (sim_cpu)
  29. test_h_gr32 0xa5a5a54b er0
  30. .endif
  31. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  32. test_gr_a5a5 2
  33. test_gr_a5a5 3
  34. test_gr_a5a5 4
  35. test_gr_a5a5 5
  36. test_gr_a5a5 6
  37. test_gr_a5a5 7
  38. .if (sim_cpu == h8sx)
  39. rotl_b_ind_1:
  40. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  41. set_ccr_zero
  42. mov #byte_dest, er0
  43. rotl.b @er0 ; shift right arithmetic by one, indirect
  44. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  45. test_zero_clear
  46. test_ovf_clear
  47. test_neg_clear
  48. test_h_gr32 byte_dest er0
  49. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  50. test_gr_a5a5 2
  51. test_gr_a5a5 3
  52. test_gr_a5a5 4
  53. test_gr_a5a5 5
  54. test_gr_a5a5 6
  55. test_gr_a5a5 7
  56. ; 1010 0101 -> 0100 1011
  57. cmp.b #0x4b, @byte_dest
  58. beq .Lbind1
  59. fail
  60. .Lbind1:
  61. mov.b #0xa5, @byte_dest
  62. rotl_b_indexb16_1:
  63. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  64. set_ccr_zero
  65. mov.b #5, r0l
  66. rotl.b @(byte_dest-5:16, r0.b) ; indexed byte/byte
  67. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  68. test_zero_clear
  69. test_ovf_clear
  70. test_neg_clear
  71. test_h_gr32 0xa5a5a505 er0
  72. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  73. test_gr_a5a5 2
  74. test_gr_a5a5 3
  75. test_gr_a5a5 4
  76. test_gr_a5a5 5
  77. test_gr_a5a5 6
  78. test_gr_a5a5 7
  79. ; 1010 0101 -> 0100 1011
  80. cmp.b #0x4b, @byte_dest
  81. beq .Lbindexb161
  82. fail
  83. .Lbindexb161:
  84. mov.b #0xa5, @byte_dest
  85. rotl_b_indexw16_1:
  86. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  87. set_ccr_zero
  88. mov.w #256, r0
  89. rotl.b @(byte_dest-256:16, r0.w) ; indexed byte/word
  90. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  91. test_zero_clear
  92. test_ovf_clear
  93. test_neg_clear
  94. test_h_gr32 0xa5a50100 er0
  95. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  96. test_gr_a5a5 2
  97. test_gr_a5a5 3
  98. test_gr_a5a5 4
  99. test_gr_a5a5 5
  100. test_gr_a5a5 6
  101. test_gr_a5a5 7
  102. ; 1010 0101 -> 0100 1011
  103. cmp.b #0x4b, @byte_dest
  104. beq .Lbindexw161
  105. fail
  106. .Lbindexw161:
  107. mov.b #0xa5, @byte_dest
  108. rotl_b_indexl16_1:
  109. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  110. set_ccr_zero
  111. mov.l #0xffffffff, er0
  112. rotl.b @(byte_dest+1:16, er0.l) ; indexed byte/long
  113. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  114. test_zero_clear
  115. test_ovf_clear
  116. test_neg_clear
  117. test_h_gr32 0xffffffff er0
  118. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  119. test_gr_a5a5 2
  120. test_gr_a5a5 3
  121. test_gr_a5a5 4
  122. test_gr_a5a5 5
  123. test_gr_a5a5 6
  124. test_gr_a5a5 7
  125. ; 1010 0101 -> 0100 1011
  126. cmp.b #0x4b, @byte_dest
  127. beq .Lbindexl161
  128. fail
  129. .Lbindexl161:
  130. mov.b #0xa5, @byte_dest
  131. rotl_b_indexb32_1:
  132. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  133. set_ccr_zero
  134. mov.b #5, r1l
  135. rotl.b @(byte_dest-5:32, r1.b) ; indexed byte/byte
  136. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  137. test_zero_clear
  138. test_ovf_clear
  139. test_neg_clear
  140. test_h_gr32 0xa5a5a505 er1
  141. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  142. test_gr_a5a5 2
  143. test_gr_a5a5 3
  144. test_gr_a5a5 4
  145. test_gr_a5a5 5
  146. test_gr_a5a5 6
  147. test_gr_a5a5 7
  148. ; 1010 0101 -> 0100 1011
  149. cmp.b #0x4b, @byte_dest
  150. beq .Lbindexb321
  151. fail
  152. .Lbindexb321:
  153. mov.b #0xa5, @byte_dest
  154. rotl_b_indexw32_1:
  155. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  156. set_ccr_zero
  157. mov.w #256, r1
  158. rotl.b @(byte_dest-256:32, r1.w) ; indexed byte/word
  159. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  160. test_zero_clear
  161. test_ovf_clear
  162. test_neg_clear
  163. test_h_gr32 0xa5a50100 er1
  164. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  165. test_gr_a5a5 2
  166. test_gr_a5a5 3
  167. test_gr_a5a5 4
  168. test_gr_a5a5 5
  169. test_gr_a5a5 6
  170. test_gr_a5a5 7
  171. ; 1010 0101 -> 0100 1011
  172. cmp.b #0x4b, @byte_dest
  173. beq .Lbindexw321
  174. fail
  175. .Lbindexw321:
  176. mov.b #0xa5, @byte_dest
  177. rotl_b_indexl32_1:
  178. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  179. set_ccr_zero
  180. mov.l #0xffffffff, er1
  181. rotl.b @(byte_dest+1:32, er1.l) ; indexed byte/long
  182. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  183. test_zero_clear
  184. test_ovf_clear
  185. test_neg_clear
  186. test_h_gr32 0xffffffff er1
  187. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  188. test_gr_a5a5 2
  189. test_gr_a5a5 3
  190. test_gr_a5a5 4
  191. test_gr_a5a5 5
  192. test_gr_a5a5 6
  193. test_gr_a5a5 7
  194. ; 1010 0101 -> 0100 1011
  195. cmp.b #0x4b, @byte_dest
  196. beq .Lbindexl321
  197. fail
  198. .Lbindexl321:
  199. mov.b #0xa5, @byte_dest
  200. .endif
  201. rotl_b_reg8_2:
  202. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  203. set_ccr_zero
  204. rotl.b #2, r0l ; shift left arithmetic by two
  205. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  206. test_zero_clear
  207. test_ovf_clear
  208. test_neg_set
  209. test_h_gr16 0xa596 r0 ; 1010 0101 -> 1001 0110
  210. .if (sim_cpu)
  211. test_h_gr32 0xa5a5a596 er0
  212. .endif
  213. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  214. test_gr_a5a5 2
  215. test_gr_a5a5 3
  216. test_gr_a5a5 4
  217. test_gr_a5a5 5
  218. test_gr_a5a5 6
  219. test_gr_a5a5 7
  220. .if (sim_cpu == h8sx)
  221. rotl_b_ind_2:
  222. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  223. set_ccr_zero
  224. mov #byte_dest, er0
  225. rotl.b #2, @er0 ; shift right arithmetic by one, indirect
  226. test_carry_clear ; H=0 N=1 Z=0 C=0
  227. test_zero_clear
  228. test_ovf_clear
  229. test_neg_set
  230. test_h_gr32 byte_dest er0
  231. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  232. test_gr_a5a5 2
  233. test_gr_a5a5 3
  234. test_gr_a5a5 4
  235. test_gr_a5a5 5
  236. test_gr_a5a5 6
  237. test_gr_a5a5 7
  238. ; 1010 0101 -> 1001 0110
  239. cmp.b #0x96, @byte_dest
  240. beq .Lbind2
  241. fail
  242. .Lbind2:
  243. mov.b #0xa5, @byte_dest
  244. rotl_b_indexb16_2:
  245. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  246. set_ccr_zero
  247. mov.b #5, r0l
  248. rotl.b #2, @(byte_dest-5:16, r0.b) ; indexed byte/byte
  249. test_carry_clear ; H=0 N=1 Z=0 C=0
  250. test_zero_clear
  251. test_ovf_clear
  252. test_neg_set
  253. test_h_gr32 0xa5a5a505 er0
  254. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  255. test_gr_a5a5 2
  256. test_gr_a5a5 3
  257. test_gr_a5a5 4
  258. test_gr_a5a5 5
  259. test_gr_a5a5 6
  260. test_gr_a5a5 7
  261. ; 1010 0101 -> 1001 0110
  262. cmp.b #0x96, @byte_dest
  263. beq .Lbindexb162
  264. fail
  265. .Lbindexb162:
  266. mov.b #0xa5, @byte_dest
  267. rotl_b_indexw16_2:
  268. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  269. set_ccr_zero
  270. mov.w #256, r0
  271. rotl.b #2, @(byte_dest-256:16, r0.w) ; indexed byte/word
  272. test_carry_clear ; H=0 N=1 Z=0 C=0
  273. test_zero_clear
  274. test_ovf_clear
  275. test_neg_set
  276. test_h_gr32 0xa5a50100 er0
  277. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  278. test_gr_a5a5 2
  279. test_gr_a5a5 3
  280. test_gr_a5a5 4
  281. test_gr_a5a5 5
  282. test_gr_a5a5 6
  283. test_gr_a5a5 7
  284. ; 1010 0101 -> 1001 0110
  285. cmp.b #0x96, @byte_dest
  286. beq .Lbindexw162
  287. fail
  288. .Lbindexw162:
  289. mov.b #0xa5, @byte_dest
  290. rotl_b_indexl16_2:
  291. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  292. set_ccr_zero
  293. mov.l #0xffffffff, er0
  294. rotl.b #2, @(byte_dest+1:16, er0.l) ; indexed byte/long
  295. test_carry_clear ; H=0 N=1 Z=0 C=0
  296. test_zero_clear
  297. test_ovf_clear
  298. test_neg_set
  299. test_h_gr32 0xffffffff er0
  300. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  301. test_gr_a5a5 2
  302. test_gr_a5a5 3
  303. test_gr_a5a5 4
  304. test_gr_a5a5 5
  305. test_gr_a5a5 6
  306. test_gr_a5a5 7
  307. ; 1010 0101 -> 1001 0110
  308. cmp.b #0x96, @byte_dest
  309. beq .Lbindexl162
  310. fail
  311. .Lbindexl162:
  312. mov.b #0xa5, @byte_dest
  313. rotl_b_indexb32_2:
  314. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  315. set_ccr_zero
  316. mov.b #5, r1l
  317. rotl.b #2, @(byte_dest-5:32, r1.b) ; indexed byte/byte
  318. test_carry_clear ; H=0 N=1 Z=0 C=0
  319. test_zero_clear
  320. test_ovf_clear
  321. test_neg_set
  322. test_h_gr32 0xa5a5a505 er1
  323. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  324. test_gr_a5a5 2
  325. test_gr_a5a5 3
  326. test_gr_a5a5 4
  327. test_gr_a5a5 5
  328. test_gr_a5a5 6
  329. test_gr_a5a5 7
  330. ; 1010 0101 -> 1001 0110
  331. cmp.b #0x96, @byte_dest
  332. beq .Lbindexb322
  333. fail
  334. .Lbindexb322:
  335. mov.b #0xa5, @byte_dest
  336. rotl_b_indexw32_2:
  337. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  338. set_ccr_zero
  339. mov.w #256, r1
  340. rotl.b #2, @(byte_dest-256:32, r1.w) ; indexed byte/word
  341. test_carry_clear ; H=0 N=1 Z=0 C=0
  342. test_zero_clear
  343. test_ovf_clear
  344. test_neg_set
  345. test_h_gr32 0xa5a50100 er1
  346. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  347. test_gr_a5a5 2
  348. test_gr_a5a5 3
  349. test_gr_a5a5 4
  350. test_gr_a5a5 5
  351. test_gr_a5a5 6
  352. test_gr_a5a5 7
  353. ; 1010 0101 -> 1001 0110
  354. cmp.b #0x96, @byte_dest
  355. beq .Lbindexw322
  356. fail
  357. .Lbindexw322:
  358. mov.b #0xa5, @byte_dest
  359. rotl_b_indexl32_2:
  360. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  361. set_ccr_zero
  362. mov.l #0xffffffff, er1
  363. rotl.b #2, @(byte_dest+1:32, er1.l) ; indexed byte/long
  364. test_carry_clear ; H=0 N=1 Z=0 C=0
  365. test_zero_clear
  366. test_ovf_clear
  367. test_neg_set
  368. test_h_gr32 0xffffffff er1
  369. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  370. test_gr_a5a5 2
  371. test_gr_a5a5 3
  372. test_gr_a5a5 4
  373. test_gr_a5a5 5
  374. test_gr_a5a5 6
  375. test_gr_a5a5 7
  376. ; 1010 0101 -> 1001 0110
  377. cmp.b #0x96, @byte_dest
  378. beq .Lbindexl322
  379. fail
  380. .Lbindexl322:
  381. mov.b #0xa5, @byte_dest
  382. .endif
  383. .if (sim_cpu) ; Not available in h8300 mode
  384. rotl_w_reg16_1:
  385. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  386. set_ccr_zero
  387. rotl.w r0 ; shift left arithmetic by one
  388. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  389. test_zero_clear
  390. test_ovf_clear
  391. test_neg_clear
  392. test_h_gr16 0x4b4b r0 ; 1010 0101 1010 0101 -> 0100 1011 0100 1011
  393. test_h_gr32 0xa5a54b4b er0
  394. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  395. test_gr_a5a5 2
  396. test_gr_a5a5 3
  397. test_gr_a5a5 4
  398. test_gr_a5a5 5
  399. test_gr_a5a5 6
  400. test_gr_a5a5 7
  401. .if (sim_cpu == h8sx)
  402. rotl_w_indexb16_1:
  403. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  404. set_ccr_zero
  405. mov.b #5, r0l
  406. rotl.w @(word_dest-10:16, r0.b) ; indexed word/byte
  407. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  408. test_zero_clear
  409. test_ovf_clear
  410. test_neg_clear
  411. test_h_gr32 0xa5a5a505 er0
  412. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  413. test_gr_a5a5 2
  414. test_gr_a5a5 3
  415. test_gr_a5a5 4
  416. test_gr_a5a5 5
  417. test_gr_a5a5 6
  418. test_gr_a5a5 7
  419. ; 1010 0101 1010 0101 -> 0100 1011 0100 1011
  420. cmp.w #0x4b4b, @word_dest
  421. beq .Lwindexb161
  422. fail
  423. .Lwindexb161:
  424. mov.w #0xa5a5, @word_dest
  425. rotl_w_indexw16_1:
  426. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  427. set_ccr_zero
  428. mov.w #256, r0
  429. rotl.w @(word_dest-512:16, r0.w) ; indexed word/word
  430. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  431. test_zero_clear
  432. test_ovf_clear
  433. test_neg_clear
  434. test_h_gr32 0xa5a50100 er0
  435. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  436. test_gr_a5a5 2
  437. test_gr_a5a5 3
  438. test_gr_a5a5 4
  439. test_gr_a5a5 5
  440. test_gr_a5a5 6
  441. test_gr_a5a5 7
  442. ; 1010 0101 1010 0101 -> 0100 1011 0100 1011
  443. cmp.w #0x4b4b, @word_dest
  444. beq .Lwindexw161
  445. fail
  446. .Lwindexw161:
  447. mov.w #0xa5a5, @word_dest
  448. rotl_w_indexl16_1:
  449. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  450. set_ccr_zero
  451. mov.l #0xffffffff, er0
  452. rotl.w @(word_dest+2:16, er0.l) ; indexed word/long
  453. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  454. test_zero_clear
  455. test_ovf_clear
  456. test_neg_clear
  457. test_h_gr32 0xffffffff er0
  458. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  459. test_gr_a5a5 2
  460. test_gr_a5a5 3
  461. test_gr_a5a5 4
  462. test_gr_a5a5 5
  463. test_gr_a5a5 6
  464. test_gr_a5a5 7
  465. ; 1010 0101 1010 0101 -> 0100 1011 0100 1011
  466. cmp.w #0x4b4b, @word_dest
  467. beq .Lwindexl161
  468. fail
  469. .Lwindexl161:
  470. mov.w #0xa5a5, @word_dest
  471. rotl_w_indexb32_1:
  472. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  473. set_ccr_zero
  474. mov.b #5, r1l
  475. rotl.w @(word_dest-10:32, r1.b) ; indexed word/byte
  476. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  477. test_zero_clear
  478. test_ovf_clear
  479. test_neg_clear
  480. test_h_gr32 0xa5a5a505 er1
  481. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  482. test_gr_a5a5 2
  483. test_gr_a5a5 3
  484. test_gr_a5a5 4
  485. test_gr_a5a5 5
  486. test_gr_a5a5 6
  487. test_gr_a5a5 7
  488. ; 1010 0101 1010 0101 -> 0100 1011 0100 1011
  489. cmp.w #0x4b4b, @word_dest
  490. beq .Lwindexb321
  491. fail
  492. .Lwindexb321:
  493. mov.w #0xa5a5, @word_dest
  494. rotl_w_indexw32_1:
  495. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  496. set_ccr_zero
  497. mov.w #256, r1
  498. rotl.w @(word_dest-512:32, r1.w) ; indexed word/byte
  499. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  500. test_zero_clear
  501. test_ovf_clear
  502. test_neg_clear
  503. test_h_gr32 0xa5a50100 er1
  504. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  505. test_gr_a5a5 2
  506. test_gr_a5a5 3
  507. test_gr_a5a5 4
  508. test_gr_a5a5 5
  509. test_gr_a5a5 6
  510. test_gr_a5a5 7
  511. ; 1010 0101 1010 0101 -> 0100 1011 0100 1011
  512. cmp.w #0x4b4b, @word_dest
  513. beq .Lwindexw321
  514. fail
  515. .Lwindexw321:
  516. mov.w #0xa5a5, @word_dest
  517. rotl_w_indexl32_1:
  518. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  519. set_ccr_zero
  520. mov.l #0xffffffff, er1
  521. rotl.w @(word_dest+2:32, er1.l) ; indexed word/byte
  522. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  523. test_zero_clear
  524. test_ovf_clear
  525. test_neg_clear
  526. test_h_gr32 0xffffffff er1
  527. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  528. test_gr_a5a5 2
  529. test_gr_a5a5 3
  530. test_gr_a5a5 4
  531. test_gr_a5a5 5
  532. test_gr_a5a5 6
  533. test_gr_a5a5 7
  534. ; 1010 0101 1010 0101 -> 0100 1011 0100 1011
  535. cmp.w #0x4b4b, @word_dest
  536. beq .Lwindexl321
  537. fail
  538. .Lwindexl321:
  539. mov.w #0xa5a5, @word_dest
  540. .endif
  541. rotl_w_reg16_2:
  542. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  543. set_ccr_zero
  544. rotl.w #2, r0 ; shift left arithmetic by two
  545. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  546. test_zero_clear
  547. test_ovf_clear
  548. test_neg_set
  549. test_h_gr16 0x9696 r0 ; 1010 0101 1010 0101 -> 1001 0110 1001 0110
  550. test_h_gr32 0xa5a59696 er0
  551. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  552. test_gr_a5a5 2
  553. test_gr_a5a5 3
  554. test_gr_a5a5 4
  555. test_gr_a5a5 5
  556. test_gr_a5a5 6
  557. test_gr_a5a5 7
  558. .if (sim_cpu == h8sx)
  559. rotl_w_indexb16_2:
  560. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  561. set_ccr_zero
  562. mov.b #5, r0l
  563. rotl.w #2, @(word_dest-10:16, r0.b) ; indexed word/byte
  564. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  565. test_zero_clear
  566. test_ovf_clear
  567. test_neg_set
  568. test_h_gr32 0xa5a5a505 er0
  569. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  570. test_gr_a5a5 2
  571. test_gr_a5a5 3
  572. test_gr_a5a5 4
  573. test_gr_a5a5 5
  574. test_gr_a5a5 6
  575. test_gr_a5a5 7
  576. ; 1010 0101 1010 0101 -> 1001 0110 1001 0110
  577. cmp.w #0x9696, @word_dest
  578. beq .Lwindexb162
  579. fail
  580. .Lwindexb162:
  581. mov.w #0xa5a5, @word_dest
  582. rotl_w_indexw16_2:
  583. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  584. set_ccr_zero
  585. mov.w #256, r0
  586. rotl.w #2, @(word_dest-512:16, r0.w) ; indexed word/word
  587. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  588. test_zero_clear
  589. test_ovf_clear
  590. test_neg_set
  591. test_h_gr32 0xa5a50100 er0
  592. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  593. test_gr_a5a5 2
  594. test_gr_a5a5 3
  595. test_gr_a5a5 4
  596. test_gr_a5a5 5
  597. test_gr_a5a5 6
  598. test_gr_a5a5 7
  599. ; 1010 0101 1010 0101 -> 1001 0110 1001 0110
  600. cmp.w #0x9696, @word_dest
  601. beq .Lwindexw162
  602. fail
  603. .Lwindexw162:
  604. mov.w #0xa5a5, @word_dest
  605. rotl_w_indexl16_2:
  606. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  607. set_ccr_zero
  608. mov.l #0xffffffff, er0
  609. rotl.w #2, @(word_dest+2:16, er0.l) ; indexed word/long
  610. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  611. test_zero_clear
  612. test_ovf_clear
  613. test_neg_set
  614. test_h_gr32 0xffffffff er0
  615. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  616. test_gr_a5a5 2
  617. test_gr_a5a5 3
  618. test_gr_a5a5 4
  619. test_gr_a5a5 5
  620. test_gr_a5a5 6
  621. test_gr_a5a5 7
  622. ; 1010 0101 1010 0101 -> 1001 0110 1001 0110
  623. cmp.w #0x9696, @word_dest
  624. beq .Lwindexl162
  625. fail
  626. .Lwindexl162:
  627. mov.w #0xa5a5, @word_dest
  628. rotl_w_indexb32_2:
  629. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  630. set_ccr_zero
  631. mov.b #5, r1l
  632. rotl.w #2, @(word_dest-10:32, r1.b) ; indexed word/byte
  633. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  634. test_zero_clear
  635. test_ovf_clear
  636. test_neg_set
  637. test_h_gr32 0xa5a5a505 er1
  638. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  639. test_gr_a5a5 2
  640. test_gr_a5a5 3
  641. test_gr_a5a5 4
  642. test_gr_a5a5 5
  643. test_gr_a5a5 6
  644. test_gr_a5a5 7
  645. ; 1010 0101 1010 0101 -> 1001 0110 1001 0110
  646. cmp.w #0x9696, @word_dest
  647. beq .Lwindexb322
  648. fail
  649. .Lwindexb322:
  650. mov.w #0xa5a5, @word_dest
  651. rotl_w_indexw32_2:
  652. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  653. set_ccr_zero
  654. mov.w #256, r1
  655. rotl.w #2, @(word_dest-512:32, r1.w) ; indexed word/byte
  656. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  657. test_zero_clear
  658. test_ovf_clear
  659. test_neg_set
  660. test_h_gr32 0xa5a50100 er1
  661. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  662. test_gr_a5a5 2
  663. test_gr_a5a5 3
  664. test_gr_a5a5 4
  665. test_gr_a5a5 5
  666. test_gr_a5a5 6
  667. test_gr_a5a5 7
  668. ; 1010 0101 1010 0101 -> 1001 0110 1001 0110
  669. cmp.w #0x9696, @word_dest
  670. beq .Lwindexw322
  671. fail
  672. .Lwindexw322:
  673. mov.w #0xa5a5, @word_dest
  674. rotl_w_indexl32_2:
  675. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  676. set_ccr_zero
  677. mov.l #0xffffffff, er1
  678. rotl.w #2, @(word_dest+2:32, er1.l) ; indexed word/byte
  679. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  680. test_zero_clear
  681. test_ovf_clear
  682. test_neg_set
  683. test_h_gr32 0xffffffff er1
  684. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  685. test_gr_a5a5 2
  686. test_gr_a5a5 3
  687. test_gr_a5a5 4
  688. test_gr_a5a5 5
  689. test_gr_a5a5 6
  690. test_gr_a5a5 7
  691. ; 1010 0101 1010 0101 -> 1001 0110 1001 0110
  692. cmp.w #0x9696, @word_dest
  693. beq .Lwindexl322
  694. fail
  695. .Lwindexl322:
  696. mov.w #0xa5a5, @word_dest
  697. .endif
  698. rotl_l_reg32_1:
  699. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  700. set_ccr_zero
  701. rotl.l er0 ; shift left arithmetic by one
  702. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  703. test_zero_clear
  704. test_ovf_clear
  705. test_neg_clear
  706. ; 1010 0101 1010 0101 1010 0101 1010 0101
  707. ; -> 0100 1011 0100 1011 0100 1011 0100 1011
  708. test_h_gr32 0x4b4b4b4b er0
  709. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  710. test_gr_a5a5 2
  711. test_gr_a5a5 3
  712. test_gr_a5a5 4
  713. test_gr_a5a5 5
  714. test_gr_a5a5 6
  715. test_gr_a5a5 7
  716. .if (sim_cpu == h8sx)
  717. rotl_l_indexb16_1:
  718. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  719. set_ccr_zero
  720. mov.b #5, r0l
  721. rotl.l @(long_dest-20:16, er0.b) ; indexed long/byte
  722. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  723. test_zero_clear
  724. test_ovf_clear
  725. test_neg_clear
  726. test_h_gr32 0xa5a5a505 er0
  727. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  728. test_gr_a5a5 2
  729. test_gr_a5a5 3
  730. test_gr_a5a5 4
  731. test_gr_a5a5 5
  732. test_gr_a5a5 6
  733. test_gr_a5a5 7
  734. ; 1010 0101 1010 0101 1010 0101 1010 0101
  735. ; -> 0100 1011 0100 1011 0100 1011 0100 1011
  736. cmp.l #0x4b4b4b4b, @long_dest
  737. beq .Llindexb161
  738. fail
  739. .Llindexb161:
  740. mov.l #0xa5a5a5a5, @long_dest
  741. rotl_l_indexw16_1:
  742. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  743. set_ccr_zero
  744. mov.w #256, r0
  745. rotl.l @(long_dest-1024:16, er0.w) ; indexed long/word
  746. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  747. test_zero_clear
  748. test_ovf_clear
  749. test_neg_clear
  750. test_h_gr32 0xa5a50100 er0
  751. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  752. test_gr_a5a5 2
  753. test_gr_a5a5 3
  754. test_gr_a5a5 4
  755. test_gr_a5a5 5
  756. test_gr_a5a5 6
  757. test_gr_a5a5 7
  758. ; 1010 0101 1010 0101 1010 0101 1010 0101
  759. ; -> 0100 1011 0100 1011 0100 1011 0100 1011
  760. cmp.l #0x4b4b4b4b, @long_dest
  761. beq .Llindexw161
  762. fail
  763. .Llindexw161:
  764. mov.l #0xa5a5a5a5, @long_dest
  765. rotl_l_indexl16_1:
  766. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  767. set_ccr_zero
  768. mov.l #0xffffffff, er0
  769. rotl.l @(long_dest+4:16, er0.l) ; indexed long/long
  770. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  771. test_zero_clear
  772. test_ovf_clear
  773. test_neg_clear
  774. test_h_gr32 0xffffffff er0
  775. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  776. test_gr_a5a5 2
  777. test_gr_a5a5 3
  778. test_gr_a5a5 4
  779. test_gr_a5a5 5
  780. test_gr_a5a5 6
  781. test_gr_a5a5 7
  782. ; 1010 0101 1010 0101 1010 0101 1010 0101
  783. ; -> 0100 1011 0100 1011 0100 1011 0100 1011
  784. cmp.l #0x4b4b4b4b, @long_dest
  785. beq .Llindexl161
  786. fail
  787. .Llindexl161:
  788. mov.l #0xa5a5a5a5, @long_dest
  789. rotl_l_indexb32_1:
  790. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  791. set_ccr_zero
  792. mov.b #5, r1l
  793. rotl.l @(long_dest-20:32, er1.b) ; indexed long/byte
  794. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  795. test_zero_clear
  796. test_ovf_clear
  797. test_neg_clear
  798. test_h_gr32 0xa5a5a505 er1
  799. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  800. test_gr_a5a5 2
  801. test_gr_a5a5 3
  802. test_gr_a5a5 4
  803. test_gr_a5a5 5
  804. test_gr_a5a5 6
  805. test_gr_a5a5 7
  806. ; 1010 0101 1010 0101 1010 0101 1010 0101
  807. ; -> 0100 1011 0100 1011 0100 1011 0100 1011
  808. cmp.l #0x4b4b4b4b, @long_dest
  809. beq .Llindexb321
  810. fail
  811. .Llindexb321:
  812. mov.l #0xa5a5a5a5, @long_dest
  813. rotl_l_indexw32_1:
  814. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  815. set_ccr_zero
  816. mov.w #256, r1
  817. rotl.l @(long_dest-1024:32, er1.w) ; indexed long/byte
  818. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  819. test_zero_clear
  820. test_ovf_clear
  821. test_neg_clear
  822. test_h_gr32 0xa5a50100 er1
  823. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  824. test_gr_a5a5 2
  825. test_gr_a5a5 3
  826. test_gr_a5a5 4
  827. test_gr_a5a5 5
  828. test_gr_a5a5 6
  829. test_gr_a5a5 7
  830. ; 1010 0101 1010 0101 1010 0101 1010 0101
  831. ; -> 0100 1011 0100 1011 0100 1011 0100 1011
  832. cmp.l #0x4b4b4b4b, @long_dest
  833. beq .Llindexw321
  834. fail
  835. .Llindexw321:
  836. mov.l #0xa5a5a5a5, @long_dest
  837. rotl_l_indexl32_1:
  838. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  839. set_ccr_zero
  840. mov.l #0xffffffff, er1
  841. rotl.l @(long_dest+4:32, er1.l) ; indexed long/byte
  842. test_carry_set ; H=0 N=0 Z=0 V=0 C=1
  843. test_zero_clear
  844. test_ovf_clear
  845. test_neg_clear
  846. test_h_gr32 0xffffffff er1
  847. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  848. test_gr_a5a5 2
  849. test_gr_a5a5 3
  850. test_gr_a5a5 4
  851. test_gr_a5a5 5
  852. test_gr_a5a5 6
  853. test_gr_a5a5 7
  854. ; 1010 0101 1010 0101 1010 0101 1010 0101
  855. ; -> 0100 1011 0100 1011 0100 1011 0100 1011
  856. cmp.l #0x4b4b4b4b, @long_dest
  857. beq .Llindexl321
  858. fail
  859. .Llindexl321:
  860. mov.l #0xa5a5a5a5, @long_dest
  861. .endif
  862. rotl_l_reg32_2:
  863. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  864. set_ccr_zero
  865. rotl.l #2, er0 ; shift left arithmetic by two
  866. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  867. test_zero_clear
  868. test_ovf_clear
  869. test_neg_set
  870. ; 1010 0101 1010 0101 1010 0101 1010 0101
  871. ; -> 1001 0110 1001 0110 1001 0110 1001 0110
  872. test_h_gr32 0x96969696 er0
  873. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  874. test_gr_a5a5 2
  875. test_gr_a5a5 3
  876. test_gr_a5a5 4
  877. test_gr_a5a5 5
  878. test_gr_a5a5 6
  879. test_gr_a5a5 7
  880. .if (sim_cpu == h8sx)
  881. rotl_l_indexb16_2:
  882. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  883. set_ccr_zero
  884. mov.b #5, r0l
  885. rotl.l #2, @(long_dest-20:16, er0.b) ; indexed long/byte
  886. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  887. test_zero_clear
  888. test_ovf_clear
  889. test_neg_set
  890. test_h_gr32 0xa5a5a505 er0
  891. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  892. test_gr_a5a5 2
  893. test_gr_a5a5 3
  894. test_gr_a5a5 4
  895. test_gr_a5a5 5
  896. test_gr_a5a5 6
  897. test_gr_a5a5 7
  898. ; 1010 0101 1010 0101 1010 0101 1010 0101
  899. ; -> 1001 0110 1001 0110 1001 0110 1001 0110
  900. cmp.l #0x96969696, @long_dest
  901. beq .Llindexb162
  902. fail
  903. .Llindexb162:
  904. mov.l #0xa5a5a5a5, @long_dest
  905. rotl_l_indexw16_2:
  906. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  907. set_ccr_zero
  908. mov.w #256, r0
  909. rotl.l #2, @(long_dest-1024:16, er0.w) ; indexed long/word
  910. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  911. test_zero_clear
  912. test_ovf_clear
  913. test_neg_set
  914. test_h_gr32 0xa5a50100 er0
  915. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  916. test_gr_a5a5 2
  917. test_gr_a5a5 3
  918. test_gr_a5a5 4
  919. test_gr_a5a5 5
  920. test_gr_a5a5 6
  921. test_gr_a5a5 7
  922. ; 1010 0101 1010 0101 1010 0101 1010 0101
  923. ; -> 1001 0110 1001 0110 1001 0110 1001 0110
  924. cmp.l #0x96969696, @long_dest
  925. beq .Llindexw162
  926. fail
  927. .Llindexw162:
  928. mov.l #0xa5a5a5a5, @long_dest
  929. rotl_l_indexl16_2:
  930. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  931. set_ccr_zero
  932. mov.l #0xffffffff, er0
  933. rotl.l #2, @(long_dest+4:16, er0.l) ; indexed long/long
  934. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  935. test_zero_clear
  936. test_ovf_clear
  937. test_neg_set
  938. test_h_gr32 0xffffffff er0
  939. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  940. test_gr_a5a5 2
  941. test_gr_a5a5 3
  942. test_gr_a5a5 4
  943. test_gr_a5a5 5
  944. test_gr_a5a5 6
  945. test_gr_a5a5 7
  946. ; 1010 0101 1010 0101 1010 0101 1010 0101
  947. ; -> 1001 0110 1001 0110 1001 0110 1001 0110
  948. cmp.l #0x96969696, @long_dest
  949. beq .Llindexl162
  950. fail
  951. .Llindexl162:
  952. mov.l #0xa5a5a5a5, @long_dest
  953. rotl_l_indexb32_2:
  954. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  955. set_ccr_zero
  956. mov.b #5, r1l
  957. rotl.l #2, @(long_dest-20:32, er1.b) ; indexed long/byte
  958. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  959. test_zero_clear
  960. test_ovf_clear
  961. test_neg_set
  962. test_h_gr32 0xa5a5a505 er1
  963. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  964. test_gr_a5a5 2
  965. test_gr_a5a5 3
  966. test_gr_a5a5 4
  967. test_gr_a5a5 5
  968. test_gr_a5a5 6
  969. test_gr_a5a5 7
  970. ; 1010 0101 1010 0101 1010 0101 1010 0101
  971. ; -> 1001 0110 1001 0110 1001 0110 1001 0110
  972. cmp.l #0x96969696, @long_dest
  973. beq .Llindexb322
  974. fail
  975. .Llindexb322:
  976. mov.l #0xa5a5a5a5, @long_dest
  977. rotl_l_indexw32_2:
  978. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  979. set_ccr_zero
  980. mov.w #256, r1
  981. rotl.l #2, @(long_dest-1024:32, er1.w) ; indexed long/byte
  982. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  983. test_zero_clear
  984. test_ovf_clear
  985. test_neg_set
  986. test_h_gr32 0xa5a50100 er1
  987. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  988. test_gr_a5a5 2
  989. test_gr_a5a5 3
  990. test_gr_a5a5 4
  991. test_gr_a5a5 5
  992. test_gr_a5a5 6
  993. test_gr_a5a5 7
  994. ; 1010 0101 1010 0101 1010 0101 1010 0101
  995. ; -> 1001 0110 1001 0110 1001 0110 1001 0110
  996. cmp.l #0x96969696, @long_dest
  997. beq .Llindexw322
  998. fail
  999. .Llindexw322:
  1000. mov.l #0xa5a5a5a5, @long_dest
  1001. rotl_l_indexl32_2:
  1002. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  1003. set_ccr_zero
  1004. mov.l #0xffffffff, er1
  1005. rotl.l #2, @(long_dest+4:32, er1.l) ; indexed long/byte
  1006. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  1007. test_zero_clear
  1008. test_ovf_clear
  1009. test_neg_set
  1010. test_h_gr32 0xffffffff er1
  1011. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  1012. test_gr_a5a5 2
  1013. test_gr_a5a5 3
  1014. test_gr_a5a5 4
  1015. test_gr_a5a5 5
  1016. test_gr_a5a5 6
  1017. test_gr_a5a5 7
  1018. ; 1010 0101 1010 0101 1010 0101 1010 0101
  1019. ; -> 1001 0110 1001 0110 1001 0110 1001 0110
  1020. cmp.l #0x96969696, @long_dest
  1021. beq .Llindexl322
  1022. fail
  1023. .Llindexl322:
  1024. mov.l #0xa5a5a5a5, @long_dest
  1025. .endif
  1026. .endif
  1027. pass
  1028. exit 0