PageRenderTime 102ms CodeModel.GetById 13ms RepoModel.GetById 1ms app.codeStats 1ms

/test/tests.c

https://github.com/salty-horse/syn68k
C | 4105 lines | 3077 code | 960 blank | 68 comment | 84 complexity | da3e32b1e548277369befce9a7478c91 MD5 | raw file
  1. #include "syn68k_public.h"
  2. #include "driver.h"
  3. #include "setup.h"
  4. #include <stdio.h>
  5. #define TEST(f, cc_mask, size, changes_memory, max_calls) void f (uint16 *code)
  6. #define MEM (US_TO_SYN68K (&mem[0]))
  7. #define MEMEND (US_TO_SYN68K (&mem[MEM_SIZE - 1]))
  8. #define MEMMID (US_TO_SYN68K (&mem[(MEM_SIZE) / 2]))
  9. #define GNUC_LOSES_WITH_EXPONENTIAL_GROWTH
  10. #ifdef GNUC_LOSES_WITH_EXPONENTIAL_GROWTH
  11. static inline int
  12. MASK (const char *s, int c)
  13. {
  14. int i, ret;
  15. for (i = 0, ret = 0; i < 16; i++)
  16. ret |= ((s[i] == c) << (15 - i));
  17. return ret;
  18. }
  19. #else
  20. #define MASK(s,c) (( (s[0 ] == (c)) << 15) | ((s[1 ] == (c)) << 14) \
  21. | ((s[2 ] == (c)) << 13) | ((s[3 ] == (c)) << 12) \
  22. | ((s[4 ] == (c)) << 11) | ((s[5 ] == (c)) << 10) \
  23. | ((s[6 ] == (c)) << 9) | ((s[7 ] == (c)) << 8) \
  24. | ((s[8 ] == (c)) << 7) | ((s[9 ] == (c)) << 6) \
  25. | ((s[10] == (c)) << 5) | ((s[11] == (c)) << 4) \
  26. | ((s[12] == (c)) << 3) | ((s[13] == (c)) << 2) \
  27. | ((s[14] == (c)) << 1) | ((s[15] == (c))))
  28. #endif
  29. #define B(s) MASK(s, '1')
  30. #define R(s) (B(s) | (MASK(s, 'r') & randint (0, 65535)))
  31. #define NOP_OPCODE 0x4E71
  32. #define RANDOM_SIZE() (randint (0, 2) << 6)
  33. /* The WRITE4 macro does not write out values in big-endian! Rather, it
  34. * writes out the words in big endian format and leaves the bytes within
  35. * each word in whatever format. This is because we always byte swap
  36. * words later, if appropriate.
  37. */
  38. #define WRITE4(c,n) \
  39. { \
  40. uint32 tmp = (n); \
  41. code[c] = tmp >> 16; \
  42. code[(c) + 1] = tmp; \
  43. }
  44. TEST (unpk_reg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  45. {
  46. code[0] = R ("1000rrr110000rrr");
  47. code[1] = randnum ();
  48. }
  49. TEST (unpk_mem, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  50. {
  51. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  52. code[0] = R ("1000rrr110001rrr");
  53. code[1] = randnum ();
  54. }
  55. TEST (unlk, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  56. {
  57. uint8 *p;
  58. for (p = mem; p < mem + MEM_SIZE; )
  59. {
  60. uint32 addr = randint (MEM + 50, MEMEND - 50) & ~1;
  61. *p++ = addr >> 24;
  62. *p++ = addr >> 16;
  63. *p++ = addr >> 8;
  64. *p++ = addr;
  65. }
  66. /* NOTE: "unlk a7" wedges my 68040 NeXT, so I am skipping that test here.
  67. * "unlk a7" works on a 68030 NeXT, so it may be worth modifying this
  68. * code to test that case when we run it on a non-68040 based machine.
  69. */
  70. /* WARNING! Assumes that mem is aligned % 4 */
  71. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 3);
  72. code[0] = R ("0100111001011000") | randint (0, 6);
  73. }
  74. TEST (movewl_ind_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  75. {
  76. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  77. code[0] = (R ("001rrrr000000rrr") /* Randomly either word or long. */
  78. | (randint (2, 4) << 6) /* Random amode [2, 4] */
  79. | (randint (2, 4) << 3)); /* Random amode [2, 4] */
  80. }
  81. TEST (divsl_ll_reg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  82. {
  83. int divisor_reg = randint (0, 7);
  84. do { EM_DREG (divisor_reg) = randnum ();} while (EM_DREG (divisor_reg) == 0);
  85. code[0] = B ("0100110001000000") | divisor_reg;
  86. code[1] = R ("0rrr1r0000000rrr");
  87. }
  88. TEST (divsl_ll_ind, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  89. {
  90. uint16 *p;
  91. int i;
  92. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  93. for (i = 0, p = (uint16 *)mem; i < MEM_SIZE / sizeof (uint16); i++)
  94. *p++ = SWAPUW_IFLE (randint (1, 65535));
  95. code[0] = R ("0100110001000rrr") | (randint (2, 4) << 3);
  96. code[1] = R ("0rrr1r0000000rrr");
  97. }
  98. TEST (divsl_ll_absl, ALL_CCS, 4, WONT_CHANGE_MEMORY, NO_LIMIT)
  99. {
  100. uint16 *p;
  101. int i;
  102. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  103. for (i = 0, p = (uint16 *)mem; i < MEM_SIZE / sizeof (uint16); i++)
  104. *p++ = SWAPUW_IFLE (randint (1, 65535));
  105. code[0] = B ("0100110001111001");
  106. code[1] = R ("0rrr1r0000000rrr");
  107. WRITE4 (2, randint (MEM + 50, MEMEND - 50) & ~1);
  108. }
  109. TEST (lea_pc_ind_preix, ALL_CCS, 50, WONT_CHANGE_MEMORY, NO_LIMIT)
  110. {
  111. int i;
  112. int bd_size = randint (2, 3), od_size = randint (1, 3);
  113. int scale = randint (0, 3);
  114. randomize_mem ();
  115. randomize_regs (0, 15, 0, 8 >> scale, (4 >> scale) - 1);
  116. /* Put out some initial NOPs */
  117. for (i = 0; i < 4; i++)
  118. code[i] = NOP_OPCODE; /* nop */
  119. /* Output the main opcode. */
  120. code[i] = R ("0100rrr111111011");
  121. code[i + 1] = (R ("rrrrr0010r000000") | (scale << 9)
  122. | (bd_size << 4) | od_size);
  123. i += 2;
  124. /* Output the base displacement. */
  125. switch (bd_size) {
  126. case 2:
  127. code[i] = (5 + (od_size - 1)) * 2 + (randint (0, 5) * 4);
  128. i++;
  129. break;
  130. case 3:
  131. WRITE4 (i, (6 + (od_size - 1)) * 2 + (randint (0, 5) * 4));
  132. i += 2;
  133. break;
  134. }
  135. /* Output outer displacement (if any). */
  136. switch (od_size) {
  137. case 1:
  138. break;
  139. case 2:
  140. code[i] = randint (-20, 20);
  141. i++;
  142. break;
  143. case 3:
  144. WRITE4 (i, randint (-20, 20));
  145. i += 2;
  146. break;
  147. }
  148. /* Skip over array of addresses. */
  149. code[i] = 0x4EF9; /* jmp absl */
  150. WRITE4 (i + 1, (unsigned long) (code - (MEMORY_OFFSET / 2) + 50));
  151. for (i += 3; i < 49; i += 2)
  152. WRITE4 (i, randint (MEM + 50, MEMEND - 50));
  153. }
  154. TEST (lea_pc_ind_postix, ALL_CCS, 50, WONT_CHANGE_MEMORY, NO_LIMIT)
  155. {
  156. int i;
  157. int bd_size = randint (2, 3), od_size = randint (1, 3);
  158. int scale = randint (0, 3);
  159. randomize_mem ();
  160. randomize_regs (0, 15, -6, 6, 0);
  161. /* Put out some initial NOPs */
  162. for (i = 0; i < 4; i++)
  163. code[i] = NOP_OPCODE; /* nop */
  164. /* Output the main opcode. */
  165. code[i] = R ("0100rrr111111011");
  166. code[i + 1] = (R ("rrrrr0010r000100") | (scale << 9)
  167. | (bd_size << 4) | od_size);
  168. i += 2;
  169. /* Output the base displacement. */
  170. switch (bd_size) {
  171. case 2:
  172. code[i] = (5 + (od_size - 1)) * 2 + (randint (0, 5) * 4);
  173. i++;
  174. break;
  175. case 3:
  176. WRITE4 (i, (6 + (od_size - 1)) * 2 + (randint (0, 5) * 4));
  177. i += 2;
  178. break;
  179. }
  180. /* Output outer displacement (if any). */
  181. switch (od_size) {
  182. case 1:
  183. break;
  184. case 2:
  185. code[i] = randint (-20, 20);
  186. i++;
  187. break;
  188. case 3:
  189. WRITE4 (i, randint (-20, 20));
  190. i += 2;
  191. break;
  192. }
  193. /* Skip over array of addresses. */
  194. code[i] = 0x4EF9; /* jmp absl */
  195. WRITE4 (i + 1, (unsigned long) (code - (MEMORY_OFFSET / 2) + 50));
  196. for (i += 3; i < 49; i += 2)
  197. WRITE4 (i, randint (MEM + 100, MEMEND - 100));
  198. }
  199. TEST (moveb_pc_ind_preix_dreg, ALL_CCS, 50, WONT_CHANGE_MEMORY, NO_LIMIT)
  200. {
  201. int i;
  202. int bd_size = randint (2, 3), od_size = randint (1, 3);
  203. int scale = randint (0, 3);
  204. randomize_mem ();
  205. randomize_regs (0, 15, 0, 8 >> scale, (4 >> scale) - 1);
  206. /* Put out some initial NOPs */
  207. for (i = 0; i < 4; i++)
  208. code[i] = NOP_OPCODE; /* nop */
  209. /* Output the main opcode. */
  210. code[i] = R ("0001rrr000111011");
  211. code[i + 1] = (R ("rrrrr0010r000000") | (scale << 9)
  212. | (bd_size << 4) | od_size);
  213. i += 2;
  214. /* Output the base displacement. */
  215. switch (bd_size) {
  216. case 2:
  217. code[i] = (5 + (od_size - 1)) * 2 + (randint (0, 5) * 4);
  218. i++;
  219. break;
  220. case 3:
  221. WRITE4 (i, (6 + (od_size - 1)) * 2 + (randint (0, 5) * 4));
  222. i += 2;
  223. break;
  224. }
  225. /* Output outer displacement (if any). */
  226. switch (od_size) {
  227. case 1:
  228. break;
  229. case 2:
  230. code[i] = randint (-20, 20);
  231. i++;
  232. break;
  233. case 3:
  234. WRITE4 (i, randint (-20, 20));
  235. i += 2;
  236. break;
  237. }
  238. /* Skip over array of addresses. */
  239. code[i] = 0x4EF9; /* jmp absl */
  240. WRITE4 (i + 1, (unsigned long) (code - (MEMORY_OFFSET / 2) + 50));
  241. for (i += 3; i < 49; i += 2)
  242. WRITE4 (i, randint (MEM + 50, MEMEND - 50));
  243. }
  244. TEST (moveb_pc_ind_postix_dreg, ALL_CCS, 50, WONT_CHANGE_MEMORY, NO_LIMIT)
  245. {
  246. int i;
  247. int bd_size = randint (2, 3), od_size = randint (1, 3);
  248. int scale = randint (0, 3);
  249. randomize_mem ();
  250. randomize_regs (0, 15, -6, 6, 0);
  251. /* Put out some initial NOPs */
  252. for (i = 0; i < 4; i++)
  253. code[i] = NOP_OPCODE; /* nop */
  254. /* Output the main opcode. */
  255. code[i] = R ("0001rrr000111011");
  256. code[i + 1] = (R ("rrrrr0010r000100") | (scale << 9)
  257. | (bd_size << 4) | od_size);
  258. i += 2;
  259. /* Output the base displacement. */
  260. switch (bd_size) {
  261. case 2:
  262. code[i] = (5 + (od_size - 1)) * 2 + (randint (0, 5) * 4);
  263. i++;
  264. break;
  265. case 3:
  266. WRITE4 (i, (6 + (od_size - 1)) * 2 + (randint (0, 5) * 4));
  267. i += 2;
  268. break;
  269. }
  270. /* Output outer displacement (if any). */
  271. switch (od_size) {
  272. case 1:
  273. break;
  274. case 2:
  275. code[i] = randint (-20, 20);
  276. i++;
  277. break;
  278. case 3:
  279. WRITE4 (i, randint (-20, 20));
  280. i += 2;
  281. break;
  282. }
  283. /* Skip over array of addresses. */
  284. code[i] = 0x4EF9; /* jmp absl */
  285. WRITE4 (i + 1, (unsigned long) (code - (MEMORY_OFFSET / 2) + 50));
  286. for (i += 3; i < 49; i += 2)
  287. WRITE4 (i, randint (MEM + 100, MEMEND - 100));
  288. }
  289. TEST (moveb_pcd16_dreg, ALL_CCS, 6, WONT_CHANGE_MEMORY, NO_LIMIT)
  290. {
  291. randomize_mem ();
  292. code[0] = NOP_OPCODE; /* nop */
  293. code[1] = NOP_OPCODE; /* nop */
  294. code[2] = R ("0001rrr000111010");
  295. code[3] = randint (-4, 4);
  296. code[4] = NOP_OPCODE; /* nop */
  297. code[5] = NOP_OPCODE; /* nop */
  298. }
  299. TEST (movewl_pcd16_dreg, ALL_CCS, 6, WONT_CHANGE_MEMORY, NO_LIMIT)
  300. {
  301. randomize_mem ();
  302. code[0] = NOP_OPCODE; /* nop */
  303. code[1] = NOP_OPCODE; /* nop */
  304. code[2] = R ("001rrrr000111010");
  305. code[3] = randint (-4, 4) & ~1;
  306. code[4] = NOP_OPCODE; /* nop */
  307. code[5] = NOP_OPCODE; /* nop */
  308. }
  309. TEST (moveb_pcd8_dreg, ALL_CCS, 40, WONT_CHANGE_MEMORY, NO_LIMIT)
  310. {
  311. int i;
  312. int long_ix = randint (0, 1); /* Are we using a index reg as a long? */
  313. randomize_mem ();
  314. randomize_regs (0, 15, -2, 2, 0);
  315. /* If we have a word sized index, blow away high word of all regs so
  316. * that we know the high word is being properly ignored.
  317. */
  318. if (!long_ix)
  319. {
  320. for (i = 0; i < 16; i++)
  321. cpu_state.regs[i].ul.n = ((cpu_state.regs[i].ul.n & 0xFFFF)
  322. | (randnum () << 16));
  323. }
  324. for (i = 0; i < 20; i++)
  325. code[i] = NOP_OPCODE; /* nop */
  326. code[i] = R ("0001rrr000111011");
  327. code[i + 1] = (R ("rrrr0rr000000000") | (long_ix << 11)
  328. | (randint (-4, 4) & 0xFF));
  329. for (i += 2; i < 40; i++)
  330. code[i] = NOP_OPCODE; /* nop */
  331. }
  332. TEST (movewl_pcd8_dreg, ALL_CCS, 40, WONT_CHANGE_MEMORY, NO_LIMIT)
  333. {
  334. int i;
  335. randomize_mem ();
  336. randomize_regs (0, 15, -2, 2, 1);
  337. for (i = 0; i < 20; i++)
  338. code[i] = NOP_OPCODE; /* nop */
  339. code[i] = R ("001rrrr000111011");
  340. code[i + 1] = R ("rrrrrrr000000000") | (randint (-4, 4) & 0xFE);
  341. for (i += 2; i < 40; i++)
  342. code[i] = NOP_OPCODE; /* nop */
  343. }
  344. TEST (moveb_pc_ind_ix_dreg, ALL_CCS, 40, WONT_CHANGE_MEMORY, NO_LIMIT)
  345. {
  346. int i;
  347. int bd_size = randint (1, 3);
  348. randomize_mem ();
  349. randomize_regs (0, 15, -2, 2, 0);
  350. for (i = 0; i < 20; i++)
  351. code[i] = NOP_OPCODE; /* nop */
  352. code[i] = R ("0001rrr000111011");
  353. code[i + 1] = R ("rrrrrrr10r000000") | (bd_size << 4);
  354. switch (bd_size) {
  355. case 1:
  356. i += 2;
  357. break;
  358. case 2:
  359. code[i + 2] = randint (-4, 4);
  360. i += 3;
  361. break;
  362. case 3:
  363. WRITE4 (i + 2, randint (-4, 4));
  364. i += 4;
  365. break;
  366. }
  367. for (; i < 40; i++)
  368. code[i] = NOP_OPCODE; /* nop */
  369. }
  370. TEST (movewl_pc_ind_ix_dreg, ALL_CCS, 40, WONT_CHANGE_MEMORY, NO_LIMIT)
  371. {
  372. int i;
  373. int bd_size = randint (1, 3);
  374. randomize_mem ();
  375. randomize_regs (0, 15, -2, 2, 1);
  376. for (i = 0; i < 20; i++)
  377. code[i] = NOP_OPCODE; /* nop */
  378. code[i] = R ("001rrrr000111011");
  379. code[i + 1] = R ("rrrrrrr10r000000") | (bd_size << 4);
  380. switch (bd_size) {
  381. case 1:
  382. i += 2;
  383. break;
  384. case 2:
  385. code[i + 2] = randint (-4, 4) & ~1;
  386. i += 3;
  387. break;
  388. case 3:
  389. WRITE4 (i + 2, randint (-4, 4) & ~1);
  390. i += 4;
  391. break;
  392. }
  393. for (; i < 40; i++)
  394. code[i] = NOP_OPCODE; /* nop */
  395. }
  396. TEST (lea_ind_preix, ALL_CCS, 50, WONT_CHANGE_MEMORY, NO_LIMIT)
  397. {
  398. int i;
  399. int bd_size, od_size = randint (1, 3);
  400. int scale = randint (0, 3);
  401. int base_address_reg = randint (0, 7);
  402. int base_suppress = randint (0, 1);
  403. int ixreg_specifier;
  404. randomize_mem ();
  405. randomize_regs (0, 15, 0, 8 >> scale, (4 >> scale) - 1);
  406. /* Put out some initial NOPs */
  407. for (i = 0; i < 4; i++)
  408. code[i] = NOP_OPCODE; /* nop */
  409. /* Determine the index reg. Make sure it's not the same as our base reg. */
  410. do
  411. {
  412. ixreg_specifier = randint (0, 15);
  413. }
  414. while ((ixreg_specifier & 8) && (ixreg_specifier & 7) == base_address_reg);
  415. if (base_suppress)
  416. bd_size = 3;
  417. else
  418. bd_size = randint (2, 3);
  419. /* Output the main opcode. */
  420. code[i] = R ("0100rrr111110000") | base_address_reg;
  421. code[i + 1] = (R ("0000r0010r000000") | (ixreg_specifier << 12)
  422. | (base_suppress << 7) | (scale << 9) | (bd_size << 4)
  423. | od_size);
  424. i += 2;
  425. /* Put the address of a block of random memory into our base register. */
  426. cpu_state.regs[8 + base_address_reg].ul.n
  427. = randint (MEM + 32, MEM + 128) & ~1;
  428. /* Output the base displacement. */
  429. if (!base_suppress)
  430. {
  431. /* Since we aren't suppressing the base, make this a small offset. */
  432. switch (bd_size) {
  433. case 2:
  434. code[i] = (5 + (od_size - 1)) * 2 + (randint (0, 5) * 4);
  435. i++;
  436. break;
  437. case 3:
  438. WRITE4 (i, (6 + (od_size - 1)) * 2 + (randint (0, 5) * 4));
  439. i += 2;
  440. break;
  441. }
  442. }
  443. else /* base_suppress */
  444. {
  445. /* Since we're suppressing the base, we must make it larger and
  446. * point directly to the base of the addresses in which we
  447. * are interested.
  448. */
  449. WRITE4 (i, MEM + 32 + (randint (0, 50) * 4));
  450. i += 2;
  451. }
  452. /* Output outer displacement (if any). */
  453. switch (od_size) {
  454. case 1:
  455. break;
  456. case 2:
  457. code[i] = randint (-20, 20);
  458. i++;
  459. break;
  460. case 3:
  461. WRITE4 (i, randint (-20, 20));
  462. i += 2;
  463. break;
  464. }
  465. /* Skip over array of addresses. */
  466. code[i] = 0x4EF9; /* jmp absl */
  467. WRITE4 (i + 1, (unsigned long) (code - (MEMORY_OFFSET / 2) + 50));
  468. for (i += 3; i < 49; i += 2)
  469. WRITE4 (i, randint (MEM + 50, MEMEND - 50));
  470. }
  471. TEST (lea_ind_postix, ALL_CCS, 50, WONT_CHANGE_MEMORY, NO_LIMIT)
  472. {
  473. int i;
  474. int bd_size, od_size = randint (1, 3);
  475. int scale = randint (0, 3);
  476. int base_address_reg = randint (0, 7);
  477. int base_suppress = randint (0, 1);
  478. int ixreg_specifier = randint (0, 15);
  479. randomize_mem ();
  480. randomize_regs (0, 15, -1024, 1024, 1);
  481. /* Put out some initial NOPs */
  482. for (i = 0; i < 4; i++)
  483. code[i] = NOP_OPCODE; /* nop */
  484. if (base_suppress)
  485. bd_size = 3;
  486. else
  487. bd_size = randint (2, 3);
  488. /* Output the main opcode. */
  489. code[i] = R ("0100rrr111110000") | base_address_reg;
  490. code[i + 1] = (R ("0000r0010r000100") | (ixreg_specifier << 12)
  491. | (base_suppress << 7) | (scale << 9) | (bd_size << 4)
  492. | od_size);
  493. i += 2;
  494. /* Put the address of a block of random memory into our base register. */
  495. cpu_state.regs[8 + base_address_reg].ul.n
  496. = randint (MEM + 32, MEMEND - 128) & ~1;
  497. /* Output the base displacement. */
  498. if (!base_suppress)
  499. {
  500. /* Since we aren't suppressing the base, make this a small offset. */
  501. switch (bd_size) {
  502. case 2:
  503. code[i] = (5 + (od_size - 1)) * 2 + (randint (0, 5) * 4);
  504. i++;
  505. break;
  506. case 3:
  507. WRITE4 (i, (6 + (od_size - 1)) * 2 + (randint (0, 5) * 4));
  508. i += 2;
  509. break;
  510. }
  511. }
  512. else /* base_suppress */
  513. {
  514. /* Since we're suppressing the base, we must make it larger and
  515. * point directly to the base of the addresses in which we
  516. * are interested.
  517. */
  518. WRITE4 (i, MEM + 32 + (randint (0, 50) * 4));
  519. i += 2;
  520. }
  521. /* Output outer displacement (if any). */
  522. switch (od_size) {
  523. case 1:
  524. break;
  525. case 2:
  526. code[i] = randint (-20, 20);
  527. i++;
  528. break;
  529. case 3:
  530. WRITE4 (i, randint (-20, 20));
  531. i += 2;
  532. break;
  533. }
  534. /* Skip over array of addresses. */
  535. code[i] = 0x4EF9; /* jmp absl */
  536. WRITE4 (i + 1, (unsigned long) (code - (MEMORY_OFFSET / 2) + 50));
  537. for (i += 3; i < 49; i += 2)
  538. WRITE4 (i, randint (MEM + 50, MEMEND - 50));
  539. }
  540. TEST (add_absl_dreg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  541. {
  542. randomize_mem ();
  543. code[0] = R ("1101rrr000111001") | RANDOM_SIZE ();
  544. WRITE4 (1, randint (MEM + 8, MEMEND - 8) & ~1);
  545. }
  546. TEST (abcd_reg, C_BIT | Z_BIT | X_BIT, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  547. {
  548. code[0] = R ("1100rrr100000rrr");
  549. }
  550. TEST (abcd_mem, C_BIT | Z_BIT | X_BIT, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  551. {
  552. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  553. code[0] = R ("1100rrr100001rrr");
  554. }
  555. TEST (addb_dreg_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  556. {
  557. code[0] = R ("1101rrr000000rrr");
  558. }
  559. TEST (addw_reg_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  560. {
  561. code[0] = R ("1101rrr00100rrrr");
  562. }
  563. TEST (addl_reg_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  564. {
  565. code[0] = R ("1101rrr01000rrrr");
  566. }
  567. TEST (add_d16_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  568. {
  569. randomize_mem ();
  570. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  571. code[0] = R ("1101rrr000101rrr") | RANDOM_SIZE ();
  572. code[1] = randint (-290, 290) & ~1;
  573. }
  574. TEST (addb_const_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  575. {
  576. code[0] = R ("1101rrr000111100");
  577. code[1] = randint (0, 65535);
  578. }
  579. TEST (addw_const_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  580. {
  581. code[0] = R ("1101rrr001111100");
  582. code[1] = randint (0, 65535);
  583. }
  584. TEST (add_dreg_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  585. {
  586. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  587. code[0] = (R ("1101rrr100000rrr")
  588. | RANDOM_SIZE ()
  589. | (randint (2, 4) << 3)); /* Random amode [2, 4] */
  590. }
  591. TEST (add_ind_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  592. {
  593. randomize_mem ();
  594. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  595. code[0] = (R ("1101rrr000000rrr")
  596. | RANDOM_SIZE ()
  597. | (randint (2, 4) << 3)); /* Random amode [2, 4] */
  598. }
  599. TEST (addl_const_dreg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  600. {
  601. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  602. code[0] = R ("1101rrr010111100");
  603. WRITE4 (1, randnum ());
  604. }
  605. TEST (add_dreg_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  606. {
  607. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  608. code[0] = R ("1101rrr100101rrr") | RANDOM_SIZE ();
  609. code[1] = randint (-290, 290) & ~1;
  610. }
  611. TEST (add_dreg_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  612. {
  613. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  614. code[0] = R ("1101rrr100111001") | RANDOM_SIZE ();
  615. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  616. }
  617. TEST (addaw_reg_areg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  618. {
  619. code[0] = R ("1101rrr01100rrrr");
  620. }
  621. TEST (addal_reg_areg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  622. {
  623. code[0] = R ("1101rrr11100rrrr");
  624. }
  625. TEST (adda_ind_areg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  626. {
  627. randomize_mem ();
  628. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  629. code[0] = (R ("1101rrrr11000rrr") /* Random size. */
  630. | (randint (2, 4) << 3)); /* Random amode [2, 4]; */
  631. }
  632. TEST (adda_d16_areg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  633. {
  634. randomize_mem ();
  635. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  636. code[0] = R ("1101rrrr11101rrr"); /* Random size. */
  637. code[1] = randint (-290, 290) & ~1;
  638. }
  639. TEST (adda_absl_areg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  640. {
  641. randomize_mem ();
  642. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  643. code[0] = R ("1101rrrr11111001"); /* Random size. */
  644. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  645. }
  646. TEST (addaw_const_areg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  647. {
  648. code[0] = R ("1101rrr011111100");
  649. code[1] = randint (0, 65535);
  650. }
  651. TEST (addal_const_areg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  652. {
  653. code[0] = R ("1101rrr111111100");
  654. code[1] = randint (0, 65535);
  655. code[2] = randint (0, 65535);
  656. }
  657. TEST (addibw_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  658. {
  659. code[0] = R ("000001100r000rrr"); /* Randomly either byte or word */
  660. code[1] = randnum ();
  661. }
  662. TEST (addil_dreg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  663. {
  664. code[0] = R ("0000011010000rrr");
  665. WRITE4 (1, randnum ());
  666. }
  667. TEST (addibw_ind, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  668. {
  669. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  670. code[0] = (R ("000001100r000rrr") /* Randomly either byte or word. */
  671. | (randint (2, 4) << 3)); /* Random amode [2, 4] */
  672. code[1] = randnum ();
  673. }
  674. TEST (addil_ind, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  675. {
  676. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  677. code[0] = (R ("0000011010000rrr")
  678. | (randint (2, 4) << 3)); /* Random amode [2, 4] */
  679. WRITE4 (1, randnum ());
  680. }
  681. TEST (addibw_d16, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  682. {
  683. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  684. code[0] = R ("000001100r101rrr"); /* Randomly either byte or word. */
  685. code[1] = randnum ();
  686. code[2] = randint (-290, 290) & ~1;
  687. }
  688. TEST (addil_d16, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  689. {
  690. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  691. code[0] = R ("0000011010101rrr");
  692. WRITE4 (1, randnum ());
  693. code[3] = randint (-290, 290) & ~1;
  694. }
  695. TEST (addibw_absl, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  696. {
  697. code[0] = R ("000001100r111001"); /* Randomly either byte or word. */
  698. code[1] = randnum ();
  699. WRITE4 (2, randint (MEM + 4, MEMEND - 4) & ~1);
  700. }
  701. TEST (addil_absl, ALL_CCS, 5, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  702. {
  703. code[0] = R ("0000011010111001"); /* Randomly either byte or word. */
  704. WRITE4 (1, randnum ());
  705. WRITE4 (3, randint (MEM + 4, MEMEND - 4) & ~1);
  706. }
  707. TEST (addq_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  708. {
  709. code[0] = R ("0101rrr000000rrr") | RANDOM_SIZE ();
  710. }
  711. TEST (addq_areg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  712. {
  713. code[0] = R ("0101rrr000001rrr") | (randint (1, 2) << 6); /* word or long */
  714. }
  715. TEST (addq_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  716. {
  717. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  718. code[0] = (R ("0101rrr000000rrr")
  719. | RANDOM_SIZE ()
  720. | (randint (2, 4) << 3)); /* random amode [2, 4] */
  721. }
  722. TEST (addq_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  723. {
  724. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  725. code[0] = R ("0101rrr000101rrr") | RANDOM_SIZE ();
  726. code[1] = randint (-290, 290) & ~1;
  727. }
  728. TEST (addq_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  729. {
  730. code[0] = R ("0101rrr000111001") | RANDOM_SIZE ();
  731. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  732. }
  733. TEST (addx_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  734. {
  735. code[0] = R ("1101rrr100000rrr") | RANDOM_SIZE ();
  736. }
  737. TEST (addx_mem, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  738. {
  739. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  740. code[0] = R ("1101rrr100001rrr") | RANDOM_SIZE ();
  741. }
  742. TEST (and_dreg_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  743. {
  744. code[0] = R ("1100rrr000000rrr") | RANDOM_SIZE ();
  745. }
  746. TEST (and_ind_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  747. {
  748. randomize_mem ();
  749. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  750. code[0] = (R ("1100rrr000000rrr")
  751. | RANDOM_SIZE ()
  752. | (randint (2, 4) << 3));
  753. }
  754. TEST (and_d16_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  755. {
  756. randomize_mem ();
  757. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  758. code[0] = R ("1100rrr000101rrr") | RANDOM_SIZE ();
  759. code[1] = randint (-290, 290) & ~1;
  760. }
  761. TEST (and_absl_dreg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  762. {
  763. randomize_mem ();
  764. code[0] = R ("1100rrr000111001") | RANDOM_SIZE ();
  765. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  766. }
  767. TEST (andbw_const_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  768. {
  769. code[0] = R ("1100rrr00r111100"); /* randomly byte or word */
  770. code[1] = randnum ();
  771. }
  772. TEST (andl_const_dreg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  773. {
  774. code[0] = R ("1100rrr010111100");
  775. WRITE4 (1, randnum ());
  776. }
  777. TEST (and_dreg_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  778. {
  779. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  780. code[0] = (R ("1100rrr100000rrr")
  781. | RANDOM_SIZE ()
  782. | (randint (2, 4) << 3));
  783. }
  784. TEST (and_dreg_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  785. {
  786. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  787. code[0] = R ("1100rrr100101rrr") | RANDOM_SIZE ();
  788. code[1] = randint (-290, 290) & ~1;
  789. }
  790. TEST (and_dreg_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  791. {
  792. code[0] = R ("1100rrr100111001") | RANDOM_SIZE ();
  793. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  794. }
  795. TEST (andibw_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  796. {
  797. code[0] = R ("000000100r000rrr");
  798. code[1] = randnum ();
  799. }
  800. TEST (andil_dreg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  801. {
  802. code[0] = R ("0000001010000rrr");
  803. WRITE4 (1, randnum ());
  804. }
  805. TEST (andibw_ind, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  806. {
  807. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  808. code[0] = R ("000000100r000rrr") | (randint (2, 4) << 3);
  809. code[1] = randnum ();
  810. }
  811. TEST (andil_ind, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  812. {
  813. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  814. code[0] = R ("0000001010000rrr") | (randint (2, 4) << 3);
  815. WRITE4 (1, randnum ());
  816. }
  817. TEST (andibw_d16, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  818. {
  819. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  820. code[0] = R ("000000100r101rrr"); /* randomly either byte or word. */
  821. code[1] = randnum ();
  822. code[2] = randint (-290, 290) & ~1;
  823. }
  824. TEST (andil_d16, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  825. {
  826. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  827. code[0] = R ("0000001010101rrr");
  828. WRITE4 (1, randnum ());
  829. code[3] = randint (-290, 290) & ~1;
  830. }
  831. TEST (andibw_absl, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  832. {
  833. code[0] = R ("000000100r111001");
  834. code[1] = randnum ();
  835. WRITE4 (2, randint (MEM + 4, MEMEND - 4) & ~1);
  836. }
  837. TEST (andil_absl, ALL_CCS, 5, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  838. {
  839. code[0] = B ("0000001010111001");
  840. WRITE4 (1, randnum ());
  841. WRITE4 (3, randint (MEM + 4, MEMEND - 4) & ~1);
  842. }
  843. TEST (andi_to_ccr, ALL_CCS, 2, WONT_CHANGE_MEMORY, 32)
  844. {
  845. code[0] = B ("0000001000111100");
  846. code[1] = times_called;
  847. }
  848. TEST (asl_dx_dy, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  849. {
  850. code[0] = R ("1110rrr100100rrr") | RANDOM_SIZE ();
  851. }
  852. TEST (asl_const_dy, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  853. {
  854. code[0] = R ("1110rrr100000rrr") | RANDOM_SIZE ();
  855. }
  856. TEST (asl_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  857. {
  858. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  859. code[0] = R ("1110000111000rrr") | (randint (2, 4) << 3);
  860. }
  861. TEST (asl_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  862. {
  863. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  864. code[0] = R ("1110000111101rrr");
  865. code[1] = randint (-290, 290) & ~1;
  866. }
  867. TEST (asl_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  868. {
  869. code[0] = B ("1110000111111001");
  870. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  871. }
  872. TEST (asr_dx_dy, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  873. {
  874. code[0] = R ("1110rrr000100rrr") | RANDOM_SIZE ();
  875. }
  876. TEST (asr_const_dy, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  877. {
  878. code[0] = R ("1110rrr000000rrr") | RANDOM_SIZE ();
  879. }
  880. TEST (asr_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  881. {
  882. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  883. code[0] = R ("1110000011000rrr") | (randint (2, 4) << 3);
  884. }
  885. TEST (asr_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  886. {
  887. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  888. code[0] = R ("1110000011101rrr");
  889. code[1] = randint (-290, 290) & ~1;
  890. }
  891. TEST (asr_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  892. {
  893. code[0] = B ("1110000011111001");
  894. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  895. }
  896. TEST (lsl_dx_dy, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  897. {
  898. code[0] = R ("1110rrr100101rrr") | RANDOM_SIZE ();
  899. }
  900. TEST (lsl_const_dy, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  901. {
  902. code[0] = R ("1110rrr100001rrr") | RANDOM_SIZE ();
  903. }
  904. TEST (lsl_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  905. {
  906. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  907. code[0] = R ("1110001111000rrr") | (randint (2, 4) << 3);
  908. }
  909. TEST (lsl_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  910. {
  911. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  912. code[0] = R ("1110001111101rrr");
  913. code[1] = randint (-290, 290) & ~1;
  914. }
  915. TEST (lsl_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  916. {
  917. code[0] = B ("1110001111111001");
  918. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  919. }
  920. TEST (lsr_dx_dy, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  921. {
  922. code[0] = R ("1110rrr000101rrr") | RANDOM_SIZE ();
  923. }
  924. TEST (lsr_const_dy, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  925. {
  926. code[0] = R ("1110rrr000001rrr") | RANDOM_SIZE ();
  927. }
  928. TEST (lsr_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  929. {
  930. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  931. code[0] = R ("1110001011000rrr") | (randint (2, 4) << 3);
  932. }
  933. TEST (lsr_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  934. {
  935. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  936. code[0] = R ("1110001011101rrr");
  937. code[1] = randint (-290, 290) & ~1;
  938. }
  939. TEST (lsr_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  940. {
  941. code[0] = B ("1110001011111001");
  942. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  943. }
  944. #define BCC_TEST_B(bits) \
  945. code[0] = 0x6004 | ((bits) << 8); /* b?? * + 4 */ \
  946. code[1] = B ("0111000000000000"); /* moveq #0,d0 */ \
  947. code[2] = 0x6002; /* bra * + 2 */ \
  948. code[3] = B ("0111000000000001"); /* moveq #1,d0 */ \
  949. code[4] = NOP_OPCODE /* nop */
  950. TEST (bra_b, ALL_CCS, 5, WONT_CHANGE_MEMORY, 2) { BCC_TEST_B (0x0); }
  951. /* 0x1 is reserved for bsr */
  952. TEST (bhi_b, ALL_CCS, 5, WONT_CHANGE_MEMORY, 2) { BCC_TEST_B (0x2); }
  953. TEST (bls_b, ALL_CCS, 5, WONT_CHANGE_MEMORY, 2) { BCC_TEST_B (0x3); }
  954. TEST (bcc_b, ALL_CCS, 5, WONT_CHANGE_MEMORY, 2) { BCC_TEST_B (0x4); }
  955. TEST (bcs_b, ALL_CCS, 5, WONT_CHANGE_MEMORY, 2) { BCC_TEST_B (0x5); }
  956. TEST (bne_b, ALL_CCS, 5, WONT_CHANGE_MEMORY, 2) { BCC_TEST_B (0x6); }
  957. TEST (beq_b, ALL_CCS, 5, WONT_CHANGE_MEMORY, 2) { BCC_TEST_B (0x7); }
  958. TEST (bvc_b, ALL_CCS, 5, WONT_CHANGE_MEMORY, 2) { BCC_TEST_B (0x8); }
  959. TEST (bvs_b, ALL_CCS, 5, WONT_CHANGE_MEMORY, 2) { BCC_TEST_B (0x9); }
  960. TEST (bpl_b, ALL_CCS, 5, WONT_CHANGE_MEMORY, 2) { BCC_TEST_B (0xA); }
  961. TEST (bmi_b, ALL_CCS, 5, WONT_CHANGE_MEMORY, 2) { BCC_TEST_B (0xB); }
  962. TEST (bge_b, ALL_CCS, 5, WONT_CHANGE_MEMORY, 2) { BCC_TEST_B (0xC); }
  963. TEST (blt_b, ALL_CCS, 5, WONT_CHANGE_MEMORY, 2) { BCC_TEST_B (0xD); }
  964. TEST (bgt_b, ALL_CCS, 5, WONT_CHANGE_MEMORY, 2) { BCC_TEST_B (0xE); }
  965. TEST (ble_b, ALL_CCS, 5, WONT_CHANGE_MEMORY, 2) { BCC_TEST_B (0xF); }
  966. #undef BCC_TEST_B
  967. #define BCC_TEST_W(bits) \
  968. code[0] = 0x6000 | ((bits) << 8); /* b?? * + 8 */ \
  969. code[1] = 0x0006; /* (offset) */ \
  970. code[2] = B ("0111000000000000"); /* moveq #0,d0 */ \
  971. code[3] = 0x6002; /* bra * + 2 */ \
  972. code[4] = B ("0111000000000001"); /* moveq #1,d0 */ \
  973. code[5] = NOP_OPCODE /* nop */
  974. TEST (bra_w, ALL_CCS, 6, WONT_CHANGE_MEMORY, 2) { BCC_TEST_W (0x0); }
  975. /* 0x1 is reserved for bsr */
  976. TEST (bhi_w, ALL_CCS, 6, WONT_CHANGE_MEMORY, 2) { BCC_TEST_W (0x2); }
  977. TEST (bls_w, ALL_CCS, 6, WONT_CHANGE_MEMORY, 2) { BCC_TEST_W (0x3); }
  978. TEST (bcc_w, ALL_CCS, 6, WONT_CHANGE_MEMORY, 2) { BCC_TEST_W (0x4); }
  979. TEST (bcs_w, ALL_CCS, 6, WONT_CHANGE_MEMORY, 2) { BCC_TEST_W (0x5); }
  980. TEST (bne_w, ALL_CCS, 6, WONT_CHANGE_MEMORY, 2) { BCC_TEST_W (0x6); }
  981. TEST (beq_w, ALL_CCS, 6, WONT_CHANGE_MEMORY, 2) { BCC_TEST_W (0x7); }
  982. TEST (bvc_w, ALL_CCS, 6, WONT_CHANGE_MEMORY, 2) { BCC_TEST_W (0x8); }
  983. TEST (bvs_w, ALL_CCS, 6, WONT_CHANGE_MEMORY, 2) { BCC_TEST_W (0x9); }
  984. TEST (bpl_w, ALL_CCS, 6, WONT_CHANGE_MEMORY, 2) { BCC_TEST_W (0xA); }
  985. TEST (bmi_w, ALL_CCS, 6, WONT_CHANGE_MEMORY, 2) { BCC_TEST_W (0xB); }
  986. TEST (bge_w, ALL_CCS, 6, WONT_CHANGE_MEMORY, 2) { BCC_TEST_W (0xC); }
  987. TEST (blt_w, ALL_CCS, 6, WONT_CHANGE_MEMORY, 2) { BCC_TEST_W (0xD); }
  988. TEST (bgt_w, ALL_CCS, 6, WONT_CHANGE_MEMORY, 2) { BCC_TEST_W (0xE); }
  989. TEST (ble_w, ALL_CCS, 6, WONT_CHANGE_MEMORY, 2) { BCC_TEST_W (0xF); }
  990. #undef BCC_TEST_W
  991. #define BCC_TEST_L(bits) \
  992. code[0] = 0x60FF | ((bits) << 8); /* b?? * + 8 */ \
  993. code[1] = 0x0000; /* (offset hi) */ \
  994. code[2] = 0x0008; /* (offset lo) */ \
  995. code[3] = B ("0111000000000000"); /* moveq #0,d0 */ \
  996. code[4] = 0x6002; /* bra * + 2 */ \
  997. code[5] = B ("0111000000000001"); /* moveq #1,d0 */ \
  998. code[6] = NOP_OPCODE /* nop */
  999. TEST (bra_l, ALL_CCS, 7, WONT_CHANGE_MEMORY, 2) { BCC_TEST_L (0x0); }
  1000. /* 0x1 is reserved for bsr */
  1001. TEST (bhi_l, ALL_CCS, 7, WONT_CHANGE_MEMORY, 2) { BCC_TEST_L (0x2); }
  1002. TEST (bls_l, ALL_CCS, 7, WONT_CHANGE_MEMORY, 2) { BCC_TEST_L (0x3); }
  1003. TEST (bcc_l, ALL_CCS, 7, WONT_CHANGE_MEMORY, 2) { BCC_TEST_L (0x4); }
  1004. TEST (bcs_l, ALL_CCS, 7, WONT_CHANGE_MEMORY, 2) { BCC_TEST_L (0x5); }
  1005. TEST (bne_l, ALL_CCS, 7, WONT_CHANGE_MEMORY, 2) { BCC_TEST_L (0x6); }
  1006. TEST (beq_l, ALL_CCS, 7, WONT_CHANGE_MEMORY, 2) { BCC_TEST_L (0x7); }
  1007. TEST (bvc_l, ALL_CCS, 7, WONT_CHANGE_MEMORY, 2) { BCC_TEST_L (0x8); }
  1008. TEST (bvs_l, ALL_CCS, 7, WONT_CHANGE_MEMORY, 2) { BCC_TEST_L (0x9); }
  1009. TEST (bpl_l, ALL_CCS, 7, WONT_CHANGE_MEMORY, 2) { BCC_TEST_L (0xA); }
  1010. TEST (bmi_l, ALL_CCS, 7, WONT_CHANGE_MEMORY, 2) { BCC_TEST_L (0xB); }
  1011. TEST (bge_l, ALL_CCS, 7, WONT_CHANGE_MEMORY, 2) { BCC_TEST_L (0xC); }
  1012. TEST (blt_l, ALL_CCS, 7, WONT_CHANGE_MEMORY, 2) { BCC_TEST_L (0xD); }
  1013. TEST (bgt_l, ALL_CCS, 7, WONT_CHANGE_MEMORY, 2) { BCC_TEST_L (0xE); }
  1014. TEST (ble_l, ALL_CCS, 7, WONT_CHANGE_MEMORY, 2) { BCC_TEST_L (0xF); }
  1015. #undef BCC_TEST_L
  1016. TEST (bchg_reg_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1017. {
  1018. code[0] = R ("0000rrr101000rrr");
  1019. }
  1020. TEST (bchg_const_reg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1021. {
  1022. code[0] = R ("0000100001000rrr");
  1023. code[1] = randint (0, 65535);
  1024. }
  1025. TEST (bchg_reg_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1026. {
  1027. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  1028. code[0] = R ("0000rrr101000rrr") | (randint (2, 4) << 3);
  1029. }
  1030. TEST (bchg_const_ind, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1031. {
  1032. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  1033. code[0] = R ("0000100001000rrr") | (randint (2, 4) << 3);
  1034. code[1] = randint (0, 65535);
  1035. }
  1036. TEST (bchg_reg_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1037. {
  1038. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  1039. code[0] = R ("0000rrr101101rrr");
  1040. code[1] = randint (-290, 290);
  1041. }
  1042. TEST (bchg_const_d16, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1043. {
  1044. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  1045. code[0] = R ("0000100001101rrr");
  1046. code[1] = randint (0, 65535);
  1047. code[2] = randint (-290, 290);
  1048. }
  1049. TEST (bchg_reg_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1050. {
  1051. code[0] = R ("0000rrr101111001");
  1052. WRITE4 (1, randint (MEM + 4, MEMEND - 4));
  1053. }
  1054. TEST (bchg_const_absl, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1055. {
  1056. code[0] = R ("0000100001111001");
  1057. code[1] = randint (0, 65535);
  1058. WRITE4 (2, randint (MEM + 4, MEMEND - 4));
  1059. }
  1060. TEST (bclr_reg_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1061. {
  1062. code[0] = R ("0000rrr110000rrr");
  1063. }
  1064. TEST (bclr_const_reg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1065. {
  1066. code[0] = R ("0000100010000rrr");
  1067. code[1] = randint (0, 65535);
  1068. }
  1069. TEST (bclr_reg_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1070. {
  1071. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  1072. code[0] = R ("0000rrr110000rrr") | (randint (2, 4) << 3);
  1073. }
  1074. TEST (bclr_const_ind, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1075. {
  1076. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  1077. code[0] = R ("0000100010000rrr") | (randint (2, 4) << 3);
  1078. code[1] = randint (0, 65535);
  1079. }
  1080. TEST (bclr_reg_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1081. {
  1082. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  1083. code[0] = R ("0000rrr110101rrr");
  1084. code[1] = randint (-290, 290);
  1085. }
  1086. TEST (bclr_const_d16, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1087. {
  1088. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  1089. code[0] = R ("0000100010101rrr");
  1090. code[1] = randint (0, 65535);
  1091. code[2] = randint (-290, 290);
  1092. }
  1093. TEST (bclr_reg_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1094. {
  1095. code[0] = R ("0000rrr110111001");
  1096. WRITE4 (1, randint (MEM + 4, MEMEND - 4));
  1097. }
  1098. TEST (bclr_const_absl, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1099. {
  1100. code[0] = R ("0000100010111001");
  1101. code[1] = randint (0, 65535);
  1102. WRITE4 (2, randint (MEM + 4, MEMEND - 4));
  1103. }
  1104. TEST (bset_reg_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1105. {
  1106. code[0] = R ("0000rrr111000rrr");
  1107. }
  1108. TEST (bset_const_reg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1109. {
  1110. code[0] = R ("0000100011000rrr");
  1111. code[1] = randint (0, 65535);
  1112. }
  1113. TEST (bset_reg_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1114. {
  1115. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  1116. code[0] = R ("0000rrr111000rrr") | (randint (2, 4) << 3);
  1117. }
  1118. TEST (bset_const_ind, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1119. {
  1120. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  1121. code[0] = R ("0000100011000rrr") | (randint (2, 4) << 3);
  1122. code[1] = randint (0, 65535);
  1123. }
  1124. TEST (bset_reg_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1125. {
  1126. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  1127. code[0] = R ("0000rrr111101rrr");
  1128. code[1] = randint (-290, 290);
  1129. }
  1130. TEST (bset_const_d16, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1131. {
  1132. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  1133. code[0] = R ("0000100011101rrr");
  1134. code[1] = randint (0, 65535);
  1135. code[2] = randint (-290, 290);
  1136. }
  1137. TEST (bset_reg_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1138. {
  1139. code[0] = R ("0000rrr111111001");
  1140. WRITE4 (1, randint (MEM + 4, MEMEND - 4));
  1141. }
  1142. TEST (bset_const_absl, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1143. {
  1144. code[0] = R ("0000100011111001");
  1145. code[1] = randint (0, 65535);
  1146. WRITE4 (2, randint (MEM + 4, MEMEND - 4));
  1147. }
  1148. TEST (btst_reg_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1149. {
  1150. code[0] = R ("0000rrr100000rrr");
  1151. }
  1152. TEST (btst_const_reg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1153. {
  1154. code[0] = R ("0000100000000rrr");
  1155. code[1] = randint (0, 65535);
  1156. }
  1157. TEST (btst_reg_ind, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1158. {
  1159. randomize_mem ();
  1160. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  1161. code[0] = R ("0000rrr100000rrr") | (randint (2, 4) << 3);
  1162. }
  1163. TEST (btst_const_ind, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1164. {
  1165. randomize_mem ();
  1166. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  1167. code[0] = R ("0000100000000rrr") | (randint (2, 4) << 3);
  1168. code[1] = randint (0, 65535);
  1169. }
  1170. TEST (btst_reg_d16, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1171. {
  1172. randomize_mem ();
  1173. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  1174. code[0] = R ("0000rrr100101rrr");
  1175. code[1] = randint (-290, 290);
  1176. }
  1177. TEST (btst_const_d16, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  1178. {
  1179. randomize_mem ();
  1180. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  1181. code[0] = R ("0000100000101rrr");
  1182. code[1] = randint (0, 65535);
  1183. code[2] = randint (-290, 290);
  1184. }
  1185. TEST (btst_reg_absl, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  1186. {
  1187. randomize_mem ();
  1188. code[0] = R ("0000rrr100111001");
  1189. WRITE4 (1, randint (MEM + 4, MEMEND - 4));
  1190. }
  1191. TEST (btst_const_absl, ALL_CCS, 4, WONT_CHANGE_MEMORY, NO_LIMIT)
  1192. {
  1193. randomize_mem ();
  1194. code[0] = B ("0000100000111001");
  1195. code[1] = randint (0, 65535);
  1196. WRITE4 (2, randint (MEM + 4, MEMEND - 4));
  1197. }
  1198. TEST (bfchg_reg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1199. {
  1200. code[0] = R ("1110101011000rrr");
  1201. code[1] = randint (0, 65535);
  1202. }
  1203. TEST (bfchg_ind, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1204. {
  1205. randomize_regs (0, 7, -250 * 8, 250 * 8, 0); /* Offset/width */
  1206. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0); /* Base */
  1207. code[0] = R ("1110101011010rrr");
  1208. code[1] = randint (0, 65535);
  1209. }
  1210. TEST (bfchg_d16, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1211. {
  1212. randomize_regs (0, 7, -130 * 8, 130 * 8, 0); /* Offset/width */
  1213. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0); /* Base */
  1214. code[0] = R ("1110101011101rrr");
  1215. code[1] = randint (0, 65535);
  1216. code[2] = randint (-130, 130);
  1217. }
  1218. TEST (bfchg_absl, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1219. {
  1220. randomize_regs (0, 7, -130 * 8, 130 * 8, 0); /* Offset/width */
  1221. code[0] = B ("1110101011111001");
  1222. code[1] = randint (0, 65535);
  1223. WRITE4 (2, randint (MEM + 200, MEMEND - 200));
  1224. }
  1225. TEST (bfclr_reg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1226. {
  1227. code[0] = R ("1110110011000rrr");
  1228. code[1] = randint (0, 65535);
  1229. }
  1230. TEST (bfclr_ind, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1231. {
  1232. randomize_regs (0, 7, -250 * 8, 250 * 8, 0); /* Offset/width */
  1233. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0); /* Base */
  1234. code[0] = R ("1110110011010rrr");
  1235. code[1] = randint (0, 65535);
  1236. }
  1237. TEST (bfclr_d16, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1238. {
  1239. randomize_regs (0, 7, -130 * 8, 130 * 8, 0); /* Offset/width */
  1240. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0); /* Base */
  1241. code[0] = R ("1110110011101rrr");
  1242. code[1] = randint (0, 65535);
  1243. code[2] = randint (-130, 130);
  1244. }
  1245. TEST (bfclr_absl, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1246. {
  1247. randomize_regs (0, 7, -130 * 8, 130 * 8, 0); /* Offset/width */
  1248. code[0] = B ("1110110011111001");
  1249. code[1] = randint (0, 65535);
  1250. WRITE4 (2, randint (MEM + 200, MEMEND - 200));
  1251. }
  1252. TEST (bfset_reg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1253. {
  1254. code[0] = R ("1110111011000rrr");
  1255. code[1] = randint (0, 65535);
  1256. }
  1257. TEST (bfset_ind, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1258. {
  1259. randomize_regs (0, 7, -250 * 8, 250 * 8, 0); /* Offset/width */
  1260. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0); /* Base */
  1261. code[0] = R ("1110111011010rrr");
  1262. code[1] = randint (0, 65535);
  1263. }
  1264. TEST (bfset_d16, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1265. {
  1266. randomize_regs (0, 7, -130 * 8, 130 * 8, 0); /* Offset/width */
  1267. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0); /* Base */
  1268. code[0] = R ("1110111011101rrr");
  1269. code[1] = randint (0, 65535);
  1270. code[2] = randint (-130, 130);
  1271. }
  1272. TEST (bfset_absl, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1273. {
  1274. randomize_regs (0, 7, -130 * 8, 130 * 8, 0); /* Offset/width */
  1275. code[0] = B ("1110111011111001");
  1276. code[1] = randint (0, 65535);
  1277. WRITE4 (2, randint (MEM + 200, MEMEND - 200));
  1278. }
  1279. TEST (bftst_reg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1280. {
  1281. code[0] = R ("1110100011000rrr");
  1282. code[1] = randint (0, 65535);
  1283. }
  1284. TEST (bftst_ind, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1285. {
  1286. randomize_mem ();
  1287. randomize_regs (0, 7, -250 * 8, 250 * 8, 0); /* Offset/width */
  1288. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0); /* Base */
  1289. code[0] = R ("1110100011010rrr");
  1290. code[1] = randint (0, 65535);
  1291. }
  1292. TEST (bftst_d16, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  1293. {
  1294. randomize_mem ();
  1295. randomize_regs (0, 7, -130 * 8, 130 * 8, 0); /* Offset/width */
  1296. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0); /* Base */
  1297. code[0] = R ("1110100011101rrr");
  1298. code[1] = randint (0, 65535);
  1299. code[2] = randint (-130, 130);
  1300. }
  1301. TEST (bftst_absl, ALL_CCS, 4, WONT_CHANGE_MEMORY, NO_LIMIT)
  1302. {
  1303. randomize_mem ();
  1304. randomize_regs (0, 7, -130 * 8, 130 * 8, 0); /* Offset/width */
  1305. code[0] = B ("1110100011111001");
  1306. code[1] = randint (0, 65535);
  1307. WRITE4 (2, randint (MEM + 200, MEMEND - 200));
  1308. }
  1309. TEST (bfexts_reg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1310. {
  1311. code[0] = R ("1110101111000rrr");
  1312. code[1] = randint (0, 65535);
  1313. }
  1314. TEST (bfexts_ind, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1315. {
  1316. randomize_mem ();
  1317. randomize_regs (0, 7, -250 * 8, 250 * 8, 0); /* Offset/width */
  1318. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0); /* Base */
  1319. code[0] = R ("1110101111010rrr");
  1320. code[1] = randint (0, 65535);
  1321. }
  1322. TEST (bfexts_d16, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  1323. {
  1324. randomize_mem ();
  1325. randomize_regs (0, 7, -130 * 8, 130 * 8, 0); /* Offset/width */
  1326. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0); /* Base */
  1327. code[0] = R ("1110101111101rrr");
  1328. code[1] = randint (0, 65535);
  1329. code[2] = randint (-130, 130);
  1330. }
  1331. TEST (bfexts_absl, ALL_CCS, 4, WONT_CHANGE_MEMORY, NO_LIMIT)
  1332. {
  1333. randomize_mem ();
  1334. randomize_regs (0, 7, -130 * 8, 130 * 8, 0); /* Offset/width */
  1335. code[0] = B ("1110101111111001");
  1336. code[1] = randint (0, 65535);
  1337. WRITE4 (2, randint (MEM + 200, MEMEND - 200));
  1338. }
  1339. TEST (bfextu_reg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1340. {
  1341. code[0] = R ("1110100111000rrr");
  1342. code[1] = randint (0, 65535);
  1343. }
  1344. TEST (bfextu_ind, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1345. {
  1346. randomize_mem ();
  1347. randomize_regs (0, 7, -250 * 8, 250 * 8, 0); /* Offset/width */
  1348. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0); /* Base */
  1349. code[0] = R ("1110100111010rrr");
  1350. code[1] = randint (0, 65535);
  1351. }
  1352. TEST (bfextu_d16, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  1353. {
  1354. randomize_mem ();
  1355. randomize_regs (0, 7, -130 * 8, 130 * 8, 0); /* Offset/width */
  1356. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0); /* Base */
  1357. code[0] = R ("1110100111101rrr");
  1358. code[1] = randint (0, 65535);
  1359. code[2] = randint (-130, 130);
  1360. }
  1361. TEST (bfextu_absl, ALL_CCS, 4, WONT_CHANGE_MEMORY, NO_LIMIT)
  1362. {
  1363. randomize_mem ();
  1364. randomize_regs (0, 7, -130 * 8, 130 * 8, 0); /* Offset/width */
  1365. code[0] = B ("1110100111111001");
  1366. code[1] = randint (0, 65535);
  1367. WRITE4 (2, randint (MEM + 200, MEMEND - 200));
  1368. }
  1369. TEST (bfffo_reg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1370. {
  1371. code[0] = R ("1110110111000rrr");
  1372. code[1] = randint (0, 65535);
  1373. }
  1374. TEST (bfffo_ind, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1375. {
  1376. randomize_mem ();
  1377. randomize_regs (0, 7, -250 * 8, 250 * 8, 0); /* Offset/width */
  1378. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0); /* Base */
  1379. code[0] = R ("1110110111010rrr");
  1380. code[1] = randint (0, 65535);
  1381. }
  1382. TEST (bfffo_d16, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  1383. {
  1384. randomize_mem ();
  1385. randomize_regs (0, 7, -130 * 8, 130 * 8, 0); /* Offset/width */
  1386. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0); /* Base */
  1387. code[0] = R ("1110110111101rrr");
  1388. code[1] = randint (0, 65535);
  1389. code[2] = randint (-130, 130);
  1390. }
  1391. TEST (bfffo_absl, ALL_CCS, 4, WONT_CHANGE_MEMORY, NO_LIMIT)
  1392. {
  1393. randomize_regs (0, 7, -130 * 8, 130 * 8, 0); /* Offset/width */
  1394. randomize_mem ();
  1395. code[0] = B ("1110110111111001");
  1396. code[1] = randint (0, 65535);
  1397. WRITE4 (2, randint (MEM + 200, MEMEND - 200));
  1398. }
  1399. TEST (bfins_reg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1400. {
  1401. code[0] = R ("1110111111000rrr");
  1402. code[1] = randint (0, 65535);
  1403. }
  1404. TEST (bfins_ind, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1405. {
  1406. randomize_regs (0, 7, -250 * 8, 250 * 8, 0); /* Offset/width */
  1407. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0); /* Base */
  1408. code[0] = R ("1110111111010rrr");
  1409. code[1] = randint (0, 65535);
  1410. }
  1411. TEST (bfins_d16, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1412. {
  1413. randomize_regs (0, 7, -130 * 8, 130 * 8, 0); /* Offset/width */
  1414. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0); /* Base */
  1415. code[0] = R ("1110111111101rrr");
  1416. code[1] = randint (0, 65535);
  1417. code[2] = randint (-130, 130);
  1418. }
  1419. TEST (bfins_absl, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1420. {
  1421. randomize_regs (0, 7, -130 * 8, 130 * 8, 0); /* Offset/width */
  1422. code[0] = B ("1110111111111001");
  1423. code[1] = randint (0, 65535);
  1424. WRITE4 (2, randint (MEM + 200, MEMEND - 200));
  1425. }
  1426. TEST (bsr_b, ALL_CCS, 6, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1427. {
  1428. randomize_regs (15, 15, MEM + 50, MEMEND - 50, 1); /* random sp */
  1429. code[0] = 0x6104; /* bsr * + 4 */
  1430. code[1] = 0x5280; /* addql #1,d0 */
  1431. code[2] = 0x6004; /* bra * + 4 */
  1432. code[3] = R ("01110000rrrrrrrr"); /* moveq #<random>,d0 */
  1433. code[4] = 0x4E75; /* rts */
  1434. code[5] = NOP_OPCODE; /* nop */
  1435. }
  1436. TEST (bsr_w, ALL_CCS, 7, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1437. {
  1438. randomize_regs (15, 15, MEM + 50, MEMEND - 50, 1); /* random sp */
  1439. code[0] = 0x6100; /* bsr * + 6 */
  1440. code[1] = 0x0006;
  1441. code[2] = 0x5280; /* addql #1,d0 */
  1442. code[3] = 0x6004; /* bra * + 4 */
  1443. code[4] = R ("01110000rrrrrrrr"); /* moveq #<random>,d0 */
  1444. code[5] = 0x4E75; /* rts */
  1445. code[6] = NOP_OPCODE; /* nop */
  1446. }
  1447. TEST (bsr_l, ALL_CCS, 8, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1448. {
  1449. randomize_regs (15, 15, MEM + 50, MEMEND - 50, 1); /* random sp */
  1450. code[0] = 0x61FF; /* bsr * + 8 */
  1451. code[1] = 0x0000;
  1452. code[2] = 0x0008;
  1453. code[3] = 0x5280; /* addql #1,d0 */
  1454. code[4] = 0x6004; /* bra * + 4 */
  1455. code[5] = R ("01110000rrrrrrrr"); /* moveq #<random>,d0 */
  1456. code[6] = 0x4E75; /* rts */
  1457. code[7] = NOP_OPCODE; /* nop */
  1458. }
  1459. TEST (cas_ind, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1460. {
  1461. randomize_regs (7, 7 + 8, MEM + 50, MEMEND - 50, 1);
  1462. code[0] = (R ("0000100011000rrr")
  1463. | (randint (1, 3) << 9) /* Random size */
  1464. | (randint (2, 4) << 3)); /* Random amode [2, 4] */
  1465. code[1] = randint (0, 65535);
  1466. }
  1467. TEST (cas2_areg, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1468. {
  1469. randomize_regs (7, 7 + 8, MEM + 50, MEMEND - 50, 1);
  1470. code[0] = R ("000011r011111100"); /* Randomly either word or long. */
  1471. code[1] = R ("1rrr000rrr000rrr");
  1472. code[2] = R ("1rrr000rrr000rrr");
  1473. }
  1474. TEST (cas2_anyreg, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1475. {
  1476. randomize_regs (0, 7 + 8, MEM + 50, MEMEND - 50, 1);
  1477. code[0] = R ("000011r011111100"); /* Randomly either word or long. */
  1478. code[1] = R ("rrrr000rrr000rrr");
  1479. code[2] = R ("rrrr000rrr000rrr");
  1480. }
  1481. TEST (clr_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1482. {
  1483. code[0] = R ("0100001000000rrr") | RANDOM_SIZE ();
  1484. }
  1485. TEST (clrb_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1486. {
  1487. randomize_regs (7, 7 + 8, MEM + 50, MEMEND - 50, 0);
  1488. code[0] = R ("0100001000000rrr") | (randint (2, 4) << 3);
  1489. }
  1490. TEST (clrwl_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1491. {
  1492. randomize_regs (7, 7 + 8, MEM + 50, MEMEND - 50, 1);
  1493. code[0] = (R ("0100001000000rrr")
  1494. | (randint (1, 2) << 6) /* Randomly either word or long. */
  1495. | (randint (2, 4) << 3)); /* Random amode [2, 4] */
  1496. }
  1497. TEST (clrb_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1498. {
  1499. code[0] = B ("0100001000111001");
  1500. WRITE4 (1, randint (MEM + 50, MEMEND - 50));
  1501. }
  1502. TEST (clrwl_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1503. {
  1504. code[0] = B ("0100001000111001") | RANDOM_SIZE ();
  1505. WRITE4 (1, randint (MEM + 50, MEMEND - 50) & ~1);
  1506. }
  1507. TEST (cmp_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1508. {
  1509. code[0] = R ("1011rrr000000rrr") | RANDOM_SIZE ();
  1510. }
  1511. TEST (cmp_areg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1512. {
  1513. code[0] = R ("1011rrr000001rrr") | RANDOM_SIZE ();
  1514. }
  1515. TEST (cmpb_ind, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1516. {
  1517. randomize_mem ();
  1518. randomize_regs (7, 7 + 8, MEM + 50, MEMEND - 50, 0);
  1519. code[0] = R ("1011rrr000000rrr") | (randint (2, 4) << 3);
  1520. }
  1521. TEST (cmpwl_ind, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1522. {
  1523. randomize_mem ();
  1524. randomize_regs (7, 7 + 8, MEM + 50, MEMEND - 50, 1);
  1525. code[0] = (R ("1011rrr000000rrr")
  1526. | (randint (1, 2) << 6) /* Randomly either word or long. */
  1527. | (randint (2, 4) << 3)); /* Random amode [2, 4] */
  1528. }
  1529. TEST (cmpb_d16, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1530. {
  1531. randomize_mem ();
  1532. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  1533. code[0] = R ("1011rrr000101rrr");
  1534. code[1] = randint (-250, 250);
  1535. }
  1536. TEST (cmpwl_d16, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1537. {
  1538. randomize_mem ();
  1539. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  1540. code[0] = R ("1011rrr000101rrr") | (randint (1, 2) << 6);
  1541. code[1] = randint (-250, 250) & ~1;
  1542. }
  1543. TEST (cmpa_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1544. {
  1545. code[0] = R ("1011rrrr1100rrrr");
  1546. }
  1547. TEST (cmpa_ind, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1548. {
  1549. randomize_mem ();
  1550. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  1551. code[0] = R ("1011rrrr11000rrr") | (randint (2, 4) << 3);
  1552. }
  1553. /* This compares an arbitrary value in a0 vs. memory indirected through
  1554. * some odd register, as opposed to comparing a legitimate address with memory.
  1555. */
  1556. TEST (cmpa_ind2, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1557. {
  1558. randomize_mem ();
  1559. randomize_regs (9, 8 + 7, MEM + 50, MEMEND - 50, 1);
  1560. code[0] = R ("1011000r11000rr1") | (randint (2, 4) << 3);
  1561. }
  1562. TEST (cmpa_d16, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1563. {
  1564. randomize_mem ();
  1565. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  1566. code[0] = R ("1011rrrr11101rrr");
  1567. code[1] = randint (-250, 250) & ~1;
  1568. }
  1569. /* This compares an arbitrary value in a0 vs. memory indirected through
  1570. * some odd register, as opposed to comparing a legitimate address with memory.
  1571. */
  1572. TEST (cmpa_d16_2, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1573. {
  1574. randomize_mem ();
  1575. randomize_regs (9, 8 + 7, MEM + 300, MEMEND - 300, 1);
  1576. code[0] = R ("1011000r11101rr1");
  1577. code[1] = randint (-250, 250) & ~1;
  1578. }
  1579. TEST (cmpa_absl, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  1580. {
  1581. randomize_mem ();
  1582. code[0] = R ("1011rrrr11111001");
  1583. WRITE4 (1, randint (MEM + 50, MEMEND - 50) & ~1);
  1584. }
  1585. TEST (cmpibw_reg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1586. {
  1587. code[0] = R ("000011000r000rrr"); /* Randomly either byte or word. */
  1588. code[1] = randnum ();
  1589. }
  1590. TEST (cmpil_reg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  1591. {
  1592. code[0] = R ("0000110010000rrr");
  1593. WRITE4 (1, randnum ());
  1594. }
  1595. TEST (cmpib_ind, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1596. {
  1597. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  1598. randomize_mem ();
  1599. code[0] = R ("0000110000000rrr") | (randint (2, 4) << 3);
  1600. code[1] = randnum ();
  1601. }
  1602. TEST (cmpiw_ind, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1603. {
  1604. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  1605. randomize_mem ();
  1606. code[0] = R ("0000110001000rrr") | (randint (2, 4) << 3);
  1607. code[1] = randnum ();
  1608. }
  1609. TEST (cmpil_ind, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  1610. {
  1611. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  1612. randomize_mem ();
  1613. code[0] = R ("0000110010000rrr") | (randint (2, 4) << 3);
  1614. WRITE4 (1, randnum ());
  1615. }
  1616. TEST (cmpmb, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1617. {
  1618. randomize_mem ();
  1619. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  1620. code[0] = R ("1011rrr100001rrr");
  1621. }
  1622. TEST (cmpmwl, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1623. {
  1624. randomize_mem ();
  1625. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  1626. code[0] = R ("1011rrr100001rrr") | (randint (1, 2) << 6); /* Word or long */
  1627. }
  1628. TEST (cmp2b_ind, X_BIT | Z_BIT | C_BIT, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1629. {
  1630. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  1631. randomize_mem ();
  1632. code[0] = R ("0000000011010rrr");
  1633. code[1] = randint (0, 15) << 12;
  1634. }
  1635. TEST (cmp2wl_ind, X_BIT | Z_BIT | C_BIT, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1636. {
  1637. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  1638. randomize_mem ();
  1639. code[0] = R ("0000000011010rrr") | (randint (1, 2) << 9);
  1640. code[1] = randint (0, 15) << 12;
  1641. }
  1642. TEST (dbcc, ALL_CCS, 3, WONT_CHANGE_MEMORY, 16)
  1643. {
  1644. code[0] = 0x5480; /* addql #2,d0 */
  1645. code[1] = (R ("0101000011001000") /* dbra *-4 */
  1646. | randint (1, 7)
  1647. | ((times_called & 0xF) << 8));
  1648. code[2] = -4;
  1649. }
  1650. /* NOTE! All div's are special cased in the test driver so that if the V bit
  1651. * is set by the real CPU, the N and Z bits are ignored.
  1652. */
  1653. TEST (divs_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1654. {
  1655. int r1, r2;
  1656. r1 = randint (0, 7);
  1657. r2 = (r1 + randint (1, 7)) & 7;
  1658. EM_DREG (r1) = randnum ();
  1659. do { EM_DREG (r2) = randnum (); } while (cpu_state.regs[r2].uw.n == 0);
  1660. code[0] = B ("1000000111000000") | (r1 << 9) | r2;
  1661. }
  1662. TEST (divs_same_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1663. {
  1664. int r1;
  1665. r1 = randint (0, 7);
  1666. do { EM_DREG (r1) = randnum (); } while (cpu_state.regs[r1].uw.n == 0);
  1667. code[0] = B ("1000000111000000") | (r1 << 9) | r1;
  1668. }
  1669. TEST (divs_ind, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1670. {
  1671. uint16 *p;
  1672. int i;
  1673. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  1674. for (i = 0, p = (uint16 *)mem; i < MEM_SIZE / sizeof (uint16); i++)
  1675. *p++ = SWAPUW_IFLE (randint (1, 65535));
  1676. code[0] = R ("1000rrr111000rrr") | (randint (2, 4) << 3);
  1677. }
  1678. TEST (divs_absl, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  1679. {
  1680. uint16 *p;
  1681. int i;
  1682. for (i = 0, p = (uint16 *)mem; i < MEM_SIZE / sizeof (uint16); i++)
  1683. *p++ = SWAPUW_IFLE (randint (1, 65535));
  1684. code[0] = R ("1000rrr111111001") | (randint (2, 4) << 3);
  1685. WRITE4 (1, randint (MEM + 50, MEMEND - 50) & ~1);
  1686. }
  1687. TEST (divu_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1688. {
  1689. int r1, r2;
  1690. r1 = randint (0, 7);
  1691. r2 = (r1 + randint (1, 7)) & 7; /* Assure r1 != r2 */
  1692. EM_DREG (r1) = randnum ();
  1693. do { EM_DREG (r2) = randnum (); } while (cpu_state.regs[r2].uw.n == 0);
  1694. code[0] = B ("1000000011000000") | (r1 << 9) | r2;
  1695. }
  1696. TEST (divu_same_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1697. {
  1698. int r1;
  1699. r1 = randint (0, 7);
  1700. do { EM_DREG (r1) = randnum (); } while (cpu_state.regs[r1].uw.n == 0);
  1701. code[0] = B ("1000000011000000") | (r1 << 9) | r1;
  1702. }
  1703. TEST (divu_ind, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1704. {
  1705. uint16 *p;
  1706. int i;
  1707. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  1708. for (i = 0, p = (uint16 *)mem; i < MEM_SIZE / sizeof (uint16); i++)
  1709. *p++ = SWAPUW_IFLE (randint (1, 65535));
  1710. code[0] = R ("1000rrr011000rrr") | (randint (2, 4) << 3);
  1711. }
  1712. TEST (divu_absl, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  1713. {
  1714. uint16 *p;
  1715. int i;
  1716. for (i = 0, p = (uint16 *)mem; i < MEM_SIZE / sizeof (uint16); i++)
  1717. *p++ = SWAPUW_IFLE (randint (1, 65535));
  1718. code[0] = R ("1000rrr011111001") | (randint (2, 4) << 3);
  1719. WRITE4 (1, randint (MEM + 50, MEMEND - 50) & ~1);
  1720. }
  1721. TEST (divul_ll_reg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1722. {
  1723. int divisor_reg = randint (0, 7);
  1724. do
  1725. {
  1726. EM_DREG (divisor_reg) = randnum ();
  1727. }
  1728. while (EM_DREG (divisor_reg) == 0);
  1729. code[0] = B ("0100110001000000") | divisor_reg;
  1730. code[1] = R ("0rrr0r0000000rrr");
  1731. }
  1732. TEST (divul_ll_ind, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1733. {
  1734. uint16 *p;
  1735. int i;
  1736. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  1737. for (i = 0, p = (uint16 *)mem; i < MEM_SIZE / sizeof (uint16); i++)
  1738. *p++ = SWAPUW_IFLE (randint (1, 65535));
  1739. code[0] = R ("0100110001000rrr") | (randint (2, 4) << 3);
  1740. code[1] = R ("0rrr0r0000000rrr");
  1741. }
  1742. TEST (divul_ll_absl, ALL_CCS, 4, WONT_CHANGE_MEMORY, NO_LIMIT)
  1743. {
  1744. uint16 *p;
  1745. int i;
  1746. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  1747. for (i = 0, p = (uint16 *)mem; i < MEM_SIZE / sizeof (uint16); i++)
  1748. *p++ = SWAPUW_IFLE (randint (1, 65535));
  1749. code[0] = B ("0100110001111001");
  1750. code[1] = R ("0rrr0r0000000rrr");
  1751. WRITE4 (2, randint (MEM + 50, MEMEND - 50) & ~1);
  1752. }
  1753. TEST (eor_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1754. {
  1755. code[0] = R ("1011rrr100000rrr") | RANDOM_SIZE ();
  1756. }
  1757. TEST (eor_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1758. {
  1759. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  1760. code[0] = (R ("1011rrr100000rrr")
  1761. | RANDOM_SIZE ()
  1762. | randint (2, 4) << 3);
  1763. }
  1764. TEST (eor_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1765. {
  1766. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  1767. code[0] = R ("1011rrr100101rrr") | RANDOM_SIZE ();
  1768. code[1] = randint (-250, 250) & ~1;
  1769. }
  1770. TEST (eor_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1771. {
  1772. code[0] = R ("1011rrr100111001") | RANDOM_SIZE ();
  1773. WRITE4 (1, randint (MEM + 50, MEMEND - 50) & ~1);
  1774. }
  1775. TEST (eoribw_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1776. {
  1777. code[0] = R ("000010100r000rrr");
  1778. code[1] = randnum ();
  1779. }
  1780. TEST (eoril_dreg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  1781. {
  1782. code[0] = R ("0000101010000rrr");
  1783. WRITE4 (1, randnum ());
  1784. }
  1785. TEST (eoribw_ind, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1786. {
  1787. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  1788. code[0] = R ("000010100r000rrr") | (randint (2, 4) << 3);
  1789. code[1] = randnum ();
  1790. }
  1791. TEST (eoril_ind, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1792. {
  1793. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  1794. code[0] = R ("0000101010000rrr") | (randint (2, 4) << 3);
  1795. WRITE4 (1, randnum ());
  1796. }
  1797. TEST (eoribw_d16, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1798. {
  1799. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  1800. code[0] = R ("000010100r101rrr"); /* randomly either byte or word. */
  1801. code[1] = randnum ();
  1802. code[2] = randint (-290, 290) & ~1;
  1803. }
  1804. TEST (eoril_d16, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1805. {
  1806. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  1807. code[0] = R ("0000101010101rrr");
  1808. WRITE4 (1, randnum ());
  1809. code[3] = randint (-290, 290) & ~1;
  1810. }
  1811. TEST (eoribw_absl, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1812. {
  1813. code[0] = R ("000010100r111001");
  1814. code[1] = randnum ();
  1815. WRITE4 (2, randint (MEM + 4, MEMEND - 4) & ~1);
  1816. }
  1817. TEST (eoril_absl, ALL_CCS, 5, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1818. {
  1819. code[0] = B ("0000101010111001");
  1820. WRITE4 (1, randnum ());
  1821. WRITE4 (3, randint (MEM + 4, MEMEND - 4) & ~1);
  1822. }
  1823. TEST (eori_to_ccr, ALL_CCS, 2, WONT_CHANGE_MEMORY, 32)
  1824. {
  1825. code[0] = B ("0000101000111100");
  1826. code[1] = times_called;
  1827. }
  1828. TEST (exg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1829. {
  1830. static int mode[] = { 8, 9, 17 };
  1831. code[0] = R ("1100rrr100000rrr") | (mode[randint (0, 2)] << 3);
  1832. }
  1833. TEST (ext, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1834. {
  1835. static int mode[] = { 2, 3, 7 };
  1836. code[0] = R ("0100100000000rrr") | (mode[randint (0, 2)] << 6);
  1837. }
  1838. TEST (jmp_absl, ALL_CCS, 5, WONT_CHANGE_MEMORY, 2)
  1839. {
  1840. code[0] = B ("0100111011111001");
  1841. WRITE4 (1, US_TO_SYN68K (&code[4]));
  1842. code[3] = 0x5480; /* addql #2,d0 */
  1843. code[4] = 0x5480; /* addql #2,d0 */
  1844. }
  1845. TEST (jmp_ind, ALL_CCS, 3, WONT_CHANGE_MEMORY, 8)
  1846. {
  1847. EM_AREG (times_called & 7) = US_TO_SYN68K (&code[2]);
  1848. code[0] = B ("0100111011010000") | (times_called & 7);
  1849. code[1] = 0x5480; /* addql #2,d0 */
  1850. code[2] = 0x5480; /* addql #2,d0 */
  1851. }
  1852. TEST (jmp_d16, ALL_CCS, 4, WONT_CHANGE_MEMORY, NO_LIMIT)
  1853. {
  1854. EM_AREG (times_called & 7) = randint (US_TO_SYN68K (&code[3] - 100),
  1855. US_TO_SYN68K (&code[3] + 100)) & ~1;
  1856. code[0] = B ("0100111011101000") | (times_called & 7);
  1857. code[1] = US_TO_SYN68K (&code[3]) - EM_AREG (times_called & 7);
  1858. code[2] = 0x5480; /* addql #2,d0 */
  1859. code[3] = 0x5480; /* addql #2,d0 */
  1860. }
  1861. TEST (jsr_absl, ALL_CCS, 7, MIGHT_CHANGE_MEMORY, 2)
  1862. {
  1863. EM_A7 = randint (MEM + 50, MEMEND - 50) & ~1;
  1864. code[0] = B ("0100111010111001");
  1865. WRITE4 (1, US_TO_SYN68K (&code[6]));
  1866. code[3] = 0x5480; /* addql #2,d0 */
  1867. code[4] = 0x5480; /* addql #2,d0 */
  1868. code[5] = 0x6002; /* bra *+2 */
  1869. code[6] = 0x4E75; /* rts */
  1870. }
  1871. TEST (jsr_ind, ALL_CCS, 5, MIGHT_CHANGE_MEMORY, 8)
  1872. {
  1873. EM_AREG (times_called % 7) = US_TO_SYN68K (&code[4]);
  1874. EM_A7 = randint (MEM + 50, MEMEND - 50) & ~1;
  1875. code[0] = B ("0100111010010000") | (times_called % 7);
  1876. code[1] = 0x5480; /* addql #2,d0 */
  1877. code[2] = 0x5480; /* addql #2,d0 */
  1878. code[3] = 0x6002; /* bra *+2 */
  1879. code[4] = 0x4E75; /* rts */
  1880. }
  1881. TEST (jsr_d16, ALL_CCS, 6, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1882. {
  1883. EM_AREG (times_called % 7) = randint (US_TO_SYN68K (&code[5] - 100),
  1884. US_TO_SYN68K (&code[5] + 100)) & ~1;
  1885. EM_A7 = randint (MEM + 50, MEMEND - 50) & ~1;
  1886. code[0] = B ("0100111010101000") | (times_called % 7);
  1887. code[1] = US_TO_SYN68K (&code[5]) - EM_AREG (times_called % 7);
  1888. code[2] = 0x5480; /* addql #2,d0 */
  1889. code[3] = 0x5480; /* addql #2,d0 */
  1890. code[4] = 0x6002; /* bra *+2 */
  1891. code[5] = 0x4E75; /* rts */
  1892. }
  1893. TEST (lea_ind, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1894. {
  1895. code[0] = R ("0100rrr111010rrr");
  1896. }
  1897. TEST (lea_d16, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1898. {
  1899. code[0] = R ("0100rrr111101rrr");
  1900. code[1] = randnum ();
  1901. }
  1902. TEST (lea_absw, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1903. {
  1904. code[0] = R ("0100rrr111111000");
  1905. code[1] = randnum ();
  1906. }
  1907. TEST (lea_absl, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  1908. {
  1909. code[0] = R ("0100rrr111111001");
  1910. WRITE4 (1, randnum ());
  1911. }
  1912. TEST (linkw, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1913. {
  1914. EM_A7 = randint (MEM + 50, MEMEND - 50) & ~1;
  1915. code[0] = R ("0100111001010rrr");
  1916. code[1] = randnum ();
  1917. }
  1918. TEST (linkl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1919. {
  1920. EM_A7 = randint (MEM + 50, MEMEND - 50) & ~1;
  1921. code[0] = R ("0100100000001rrr");
  1922. WRITE4 (1, randnum ());
  1923. }
  1924. TEST (move16_postinc_postinc, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1925. {
  1926. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  1927. code[0] = R ("1111011000100rrr");
  1928. code[1] = R ("1rrr000000000000");
  1929. }
  1930. TEST (move16_absl_ind, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1931. {
  1932. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  1933. code[0] = R ("1111011000011rrr");
  1934. WRITE4 (1, randint (MEM + 50, MEMEND - 50));
  1935. }
  1936. TEST (move16_absl_postinc, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1937. {
  1938. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  1939. code[0] = R ("1111011000001rrr");
  1940. WRITE4 (1, randint (MEM + 50, MEMEND - 50));
  1941. }
  1942. TEST (move16_ind_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1943. {
  1944. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  1945. code[0] = R ("1111011000010rrr");
  1946. WRITE4 (1, randint (MEM + 50, MEMEND - 50));
  1947. }
  1948. TEST (move16_postinc_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  1949. {
  1950. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  1951. code[0] = R ("1111011000000rrr");
  1952. WRITE4 (1, randint (MEM + 50, MEMEND - 50));
  1953. }
  1954. TEST (moveb_dreg_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1955. {
  1956. code[0] = R ("0001rrr000000rrr");
  1957. }
  1958. TEST (movewl_reg_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1959. {
  1960. code[0] = R ("001rrrr00000rrrr"); /* Randomly either word or long. */
  1961. }
  1962. TEST (moveb_ind_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1963. {
  1964. randomize_mem ();
  1965. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  1966. code[0] = (R ("0001rrr000000rrr")
  1967. | (randint (2, 4) << 3)); /* Random amode [2, 4] */
  1968. }
  1969. TEST (movewl_ind_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  1970. {
  1971. randomize_mem ();
  1972. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  1973. code[0] = (R ("001rrrr000000rrr") /* Randomly word or long. */
  1974. | (randint (2, 4) << 3)); /* Random amode [2, 4] */
  1975. }
  1976. TEST (moveb_d16_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1977. {
  1978. randomize_mem ();
  1979. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  1980. code[0] = R ("0001rrr000101rrr");
  1981. code[1] = randint (-290, 290);
  1982. }
  1983. TEST (movewl_d16_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  1984. {
  1985. randomize_mem ();
  1986. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  1987. code[0] = R ("001rrrr000101rrr"); /* Randomly either word or long. */
  1988. code[1] = randint (-290, 290) & ~1;
  1989. }
  1990. TEST (moveb_absl_dreg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  1991. {
  1992. randomize_mem ();
  1993. code[0] = R ("0001rrr000111001");
  1994. WRITE4 (1, randint (MEM + 50, MEMEND - 50));
  1995. }
  1996. TEST (movewl_absl_dreg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  1997. {
  1998. randomize_mem ();
  1999. code[0] = R ("001rrrr000111001"); /* Randomly either word or long. */
  2000. WRITE4 (1, randint (MEM + 50, MEMEND - 50) & ~1);
  2001. }
  2002. TEST (movebw_const_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2003. {
  2004. code[0] = R ("00r1rrr000111100"); /* Randomly either byte or word. */
  2005. code[1] = randnum ();
  2006. }
  2007. TEST (movel_const_dreg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  2008. {
  2009. code[0] = R ("0010rrr000111100");
  2010. WRITE4 (1, randnum ());
  2011. }
  2012. TEST (moveb_dreg_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2013. {
  2014. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  2015. code[0] = (R ("0001rrr000000rrr")
  2016. | (randint (2, 4) << 6)); /* Random amode [2, 4] */
  2017. }
  2018. TEST (movewl_reg_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2019. {
  2020. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2021. code[0] = (R ("001rrrr00000rrrr") /* Randomly word or long. */
  2022. | (randint (2, 4) << 6)); /* Random amode [2, 4] */
  2023. }
  2024. TEST (moveb_dreg_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2025. {
  2026. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  2027. code[0] = R ("0001rrr101000rrr");
  2028. code[1] = randint (-290, 290);
  2029. }
  2030. TEST (movewl_reg_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2031. {
  2032. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2033. code[0] = R ("001rrrr10100rrrr"); /* Randomly either word or long. */
  2034. code[1] = randint (-290, 290) & ~1;
  2035. }
  2036. TEST (moveb_dreg_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2037. {
  2038. code[0] = R ("0001001111000rrr");
  2039. WRITE4 (1, randint (MEM + 50, MEMEND - 50));
  2040. }
  2041. TEST (movewl_reg_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2042. {
  2043. code[0] = R ("001r00111100rrrr"); /* Randomly either word or long. */
  2044. WRITE4 (1, randint (MEM + 50, MEMEND - 50) & ~1);
  2045. }
  2046. TEST (moveb_ind_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2047. {
  2048. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  2049. code[0] = (R ("0001rrr000000rrr")
  2050. | (randint (2, 4) << 6)
  2051. | (randint (2, 4) << 3));
  2052. }
  2053. TEST (moveb_ind_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2054. {
  2055. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  2056. code[0] = R ("0001rrr101000rrr") | (randint (2, 4) << 3);
  2057. code[1] = randint (-290, 290);
  2058. }
  2059. TEST (moveb_d16_ind, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2060. {
  2061. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  2062. code[0] = R ("0001rrr000101rrr") | (randint (2, 4) << 6);
  2063. code[1] = randint (-290, 290);
  2064. }
  2065. TEST (movewl_ind_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2066. {
  2067. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2068. code[0] = R ("001rrrr101000rrr") | (randint (2, 4) << 3);
  2069. code[1] = randint (-290, 290) & ~1;
  2070. }
  2071. TEST (movewl_d16_ind, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2072. {
  2073. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2074. code[0] = R ("001rrrr000101rrr") | (randint (2, 4) << 6);
  2075. code[1] = randint (-290, 290) & ~1;
  2076. }
  2077. TEST (moveb_d16_d16, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2078. {
  2079. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  2080. code[0] = R ("0001rrr101101rrr");
  2081. code[1] = randint (-290, 290);
  2082. code[2] = randint (-290, 290);
  2083. }
  2084. TEST (movewl_d16_d16, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2085. {
  2086. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2087. code[0] = R ("001rrrr101101rrr");
  2088. code[1] = randint (-290, 290) & ~1;
  2089. code[2] = randint (-290, 290) & ~1;
  2090. }
  2091. TEST (moveb_ind_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2092. {
  2093. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  2094. code[0] = R ("0001001111000rrr") | (randint (2, 4) << 3);
  2095. WRITE4 (1, randint (MEM + 50, MEMEND - 50));
  2096. }
  2097. TEST (movewl_ind_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2098. {
  2099. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2100. code[0] = R ("001r001111000rrr") | (randint (2, 4) << 3);
  2101. WRITE4 (1, randint (MEM + 50, MEMEND - 50) & ~1);
  2102. }
  2103. TEST (moveb_absl_ind, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2104. {
  2105. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  2106. code[0] = R ("0001rrr000111001") | (randint (2, 4) << 6);
  2107. WRITE4 (1, randint (MEM + 50, MEMEND - 50));
  2108. }
  2109. TEST (movewl_absl_ind, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2110. {
  2111. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2112. code[0] = R ("001rrrr000111001") | (randint (2, 4) << 6);
  2113. WRITE4 (1, randint (MEM + 50, MEMEND - 50) & ~1);
  2114. }
  2115. TEST (moveb_absl_absl, ALL_CCS, 5, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2116. {
  2117. code[0] = B ("0001001111111001");
  2118. WRITE4 (1, randint (MEM + 50, MEMEND - 50));
  2119. WRITE4 (3, randint (MEM + 50, MEMEND - 50));
  2120. }
  2121. TEST (movewl_absl_absl, ALL_CCS, 5, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2122. {
  2123. code[0] = R ("001r001111111001");
  2124. WRITE4 (1, randint (MEM + 50, MEMEND - 50) & ~1);
  2125. WRITE4 (3, randint (MEM + 50, MEMEND - 50) & ~1);
  2126. }
  2127. TEST (moveb_d16_absl, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2128. {
  2129. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  2130. code[0] = R ("0001001111101rrr");
  2131. code[1] = randint (-290, 290);
  2132. WRITE4 (2, randint (MEM + 50, MEMEND - 50));
  2133. }
  2134. TEST (movewl_d16_absl, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2135. {
  2136. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2137. code[0] = R ("001r001111101rrr");
  2138. code[1] = randint (-290, 290) & ~1;
  2139. WRITE4 (2, randint (MEM + 50, MEMEND - 50) & ~1);
  2140. }
  2141. TEST (moveb_absl_d16, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2142. {
  2143. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  2144. code[0] = R ("0001rrr101111001");
  2145. WRITE4 (1, randint (MEM + 50, MEMEND - 50));
  2146. code[3] = randint (-290, 290);
  2147. }
  2148. TEST (movewl_absl_d16, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2149. {
  2150. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2151. code[0] = R ("001rrrr101111001");
  2152. WRITE4 (1, randint (MEM + 50, MEMEND - 50) & ~1);
  2153. code[3] = randint (-290, 290) & ~1;
  2154. }
  2155. TEST (moveb_const_ind, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2156. {
  2157. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  2158. code[0] = R ("0001rrr000111100") | (randint (2, 4) << 6);
  2159. code[1] = randnum ();
  2160. }
  2161. TEST (moveb_const_d16, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2162. {
  2163. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  2164. code[0] = R ("0001rrr101111100");
  2165. code[1] = randnum ();
  2166. code[2] = randint (-290, 290);
  2167. }
  2168. TEST (moveb_const_absl, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2169. {
  2170. code[0] = B ("0001001111111100");
  2171. code[1] = randnum ();
  2172. WRITE4 (2, randint (MEM + 50, MEMEND - 50) & ~1);
  2173. }
  2174. TEST (movew_const_ind, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2175. {
  2176. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2177. code[0] = R ("0011rrr000111100") | (randint (2, 4) << 6);
  2178. code[1] = randnum ();
  2179. }
  2180. TEST (movew_const_d16, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2181. {
  2182. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2183. code[0] = R ("0011rrr101111100");
  2184. code[1] = randnum ();
  2185. code[2] = randint (-290, 290) & ~1;
  2186. }
  2187. TEST (movew_const_absl, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2188. {
  2189. code[0] = B ("0011001111111100");
  2190. code[1] = randnum ();
  2191. WRITE4 (2, randint (MEM + 50, MEMEND - 50) & ~1);
  2192. }
  2193. TEST (movel_const_ind, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2194. {
  2195. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2196. code[0] = R ("0010rrr000111100") | (randint (2, 4) << 6);
  2197. WRITE4 (1, randnum ());
  2198. }
  2199. TEST (movel_const_d16, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2200. {
  2201. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2202. code[0] = R ("0010rrr101111100");
  2203. WRITE4 (1, randnum ());
  2204. code[3] = randint (-290, 290) & ~1;
  2205. }
  2206. TEST (movel_const_absl, ALL_CCS, 5, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2207. {
  2208. code[0] = B ("0010001111111100");
  2209. WRITE4 (1, randnum ());
  2210. WRITE4 (3, randint (MEM + 50, MEMEND - 50) & ~1);
  2211. }
  2212. TEST (movea_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2213. {
  2214. code[0] = R ("001rrrr00100rrrr");
  2215. }
  2216. TEST (movea_ind, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2217. {
  2218. randomize_mem ();
  2219. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2220. code[0] = R ("001rrrr001000rrr") | (randint (2, 4) << 3);
  2221. }
  2222. TEST (movea_d16, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2223. {
  2224. randomize_mem ();
  2225. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2226. code[0] = R ("001rrrr001101rrr");
  2227. code[1] = randint (-290, 290) & ~1;
  2228. }
  2229. TEST (movea_absl, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  2230. {
  2231. randomize_mem ();
  2232. code[0] = R ("001rrrr001111001");
  2233. WRITE4 (1, randint (MEM + 50, MEMEND - 50) & ~1);
  2234. }
  2235. TEST (moveaw_const, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2236. {
  2237. code[0] = R ("0011rrr001111100");
  2238. code[1] = randnum ();
  2239. }
  2240. TEST (moveal_const, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  2241. {
  2242. code[0] = R ("0010rrr001111100");
  2243. WRITE4 (1, randnum ());
  2244. }
  2245. TEST (move_from_ccr_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2246. {
  2247. code[0] = R ("0100001011000rrr");
  2248. }
  2249. TEST (move_from_ccr_ind, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2250. {
  2251. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2252. code[0] = R ("0100001011000rrr") | (randint (2, 4) << 3);
  2253. }
  2254. TEST (move_from_ccr_d16, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2255. {
  2256. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2257. code[0] = R ("0100001011101rrr");
  2258. code[1] = randint (-290, 290) & ~1;
  2259. }
  2260. TEST (move_to_ccr_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2261. {
  2262. code[0] = R ("0100010011000rrr");
  2263. }
  2264. TEST (move_to_ccr_ind, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2265. {
  2266. randomize_mem ();
  2267. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2268. code[0] = R ("0100010011000rrr") | (randint (2, 4) << 3);
  2269. }
  2270. TEST (movem_to_ind, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2271. {
  2272. int indreg = randint (0, 7);
  2273. EM_AREG (indreg) = randint (MEM + 100, MEMEND - 100) & ~1;
  2274. code[0] = R ("010010001r010000") | indreg;
  2275. code[1] = randnum ();
  2276. }
  2277. TEST (movem_to_predec, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2278. {
  2279. int indreg = randint (0, 7);
  2280. EM_AREG (indreg) = randint (MEM + 100, MEMEND - 100) & ~1;
  2281. code[0] = R ("010010001r100000") | indreg;
  2282. code[1] = randnum ();
  2283. }
  2284. TEST (movem_to_d16, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2285. {
  2286. int indreg = randint (0, 7);
  2287. EM_AREG (indreg) = randint (MEM + 500, MEMEND - 500) & ~1;
  2288. code[0] = R ("010010001r101000") | indreg;
  2289. code[1] = randnum ();
  2290. code[2] = randint (-290, 290) & ~1;
  2291. }
  2292. TEST (movem_to_absl, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2293. {
  2294. code[0] = R ("010010001r111001");
  2295. code[1] = randnum ();
  2296. WRITE4 (2, randint (MEM + 100, MEMEND - 100) & ~1);
  2297. }
  2298. TEST (movem_from_d16, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  2299. {
  2300. int indreg = randint (0, 7);
  2301. randomize_mem ();
  2302. EM_AREG (indreg) = randint (MEM + 500, MEMEND - 500) & ~1;
  2303. code[0] = R ("010011001r101000") | indreg;
  2304. code[1] = randnum ();
  2305. code[2] = randint (-290, 290) & ~1;
  2306. }
  2307. TEST (movem_from_ind, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2308. {
  2309. int indreg = randint (0, 7);
  2310. randomize_mem ();
  2311. EM_AREG (indreg) = randint (MEM + 100, MEMEND - 100) & ~1;
  2312. code[0] = R ("010011001r01r000") | indreg; /* Randomly an@ or an@+ */
  2313. code[1] = randnum ();
  2314. }
  2315. TEST (movem_from_absl, ALL_CCS, 4, WONT_CHANGE_MEMORY, NO_LIMIT)
  2316. {
  2317. randomize_mem ();
  2318. code[0] = R ("010011001r111001");
  2319. code[1] = randnum ();
  2320. WRITE4 (2, randint (MEM + 100, MEMEND - 100) & ~1);
  2321. }
  2322. TEST (movep_to_mem, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2323. {
  2324. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  2325. code[0] = R ("0000rrr11r001rrr");
  2326. code[1] = randint (-290, 290);
  2327. }
  2328. TEST (movep_from_mem, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2329. {
  2330. randomize_mem ();
  2331. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  2332. code[0] = R ("0000rrr10r001rrr");
  2333. code[1] = randint (-290, 290);
  2334. }
  2335. TEST (moveq, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2336. {
  2337. code[0] = R ("0111rrr0rrrrrrrr");
  2338. }
  2339. TEST (mulsw_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2340. {
  2341. code[0] = R ("1100rrr111000rrr");
  2342. }
  2343. TEST (mulsw_ind, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2344. {
  2345. randomize_mem ();
  2346. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2347. code[0] = R ("1100rrr111000rrr") | (randint (2, 4) << 3);
  2348. }
  2349. TEST (mulsw_d16, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2350. {
  2351. randomize_mem ();
  2352. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2353. code[0] = R ("1100rrr111101rrr");
  2354. code[1] = randint (-290, 290) & ~1;
  2355. }
  2356. TEST (mulsw_absl, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  2357. {
  2358. randomize_mem ();
  2359. code[0] = R ("1100rrr111111001");
  2360. WRITE4 (1, randint (MEM + 50, MEMEND - 50) & ~1);
  2361. }
  2362. TEST (muluw_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2363. {
  2364. code[0] = R ("1100rrr011000rrr");
  2365. }
  2366. TEST (muluw_ind, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2367. {
  2368. randomize_mem ();
  2369. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2370. code[0] = R ("1100rrr011000rrr") | (randint (2, 4) << 3);
  2371. }
  2372. TEST (muluw_d16, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2373. {
  2374. randomize_mem ();
  2375. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2376. code[0] = R ("1100rrr011101rrr");
  2377. code[1] = randint (-290, 290) & ~1;
  2378. }
  2379. TEST (muluw_absl, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  2380. {
  2381. randomize_mem ();
  2382. code[0] = R ("1100rrr011111001");
  2383. WRITE4 (1, randint (MEM + 50, MEMEND - 50) & ~1);
  2384. }
  2385. TEST (mulsl_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2386. {
  2387. int r1 = randint (0, 7);
  2388. int r2 = (r1 + randint (1, 7)) & 7; /* Assure r1 != r2 */
  2389. code[0] = R ("0100110000000rrr");
  2390. code[1] = R ("00001r0000000000") | (r1 << 12) | r2;
  2391. }
  2392. TEST (mulsl_ind, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2393. {
  2394. int r1 = randint (0, 7);
  2395. int r2 = (r1 + randint (1, 7)) & 7; /* Assure r1 != r2 */
  2396. randomize_mem ();
  2397. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2398. code[0] = R ("0100110000000rrr") | (randint (2, 4) << 3);
  2399. code[1] = R ("00001r0000000000") | (r1 << 12) | r2;
  2400. }
  2401. TEST (mulsl_d16, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  2402. {
  2403. int r1 = randint (0, 7);
  2404. int r2 = (r1 + randint (1, 7)) & 7; /* Assure r1 != r2 */
  2405. randomize_mem ();
  2406. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2407. code[0] = R ("0100110000101rrr");
  2408. code[1] = R ("00001r0000000000") | (r1 << 12) | r2;
  2409. code[2] = randint (-290, 290) & ~1;
  2410. }
  2411. TEST (mulsl_absl, ALL_CCS, 4, WONT_CHANGE_MEMORY, NO_LIMIT)
  2412. {
  2413. int r1 = randint (0, 7);
  2414. int r2 = (r1 + randint (1, 7)) & 7; /* Assure r1 != r2 */
  2415. randomize_mem ();
  2416. code[0] = B ("0100110000111001");
  2417. code[1] = R ("00001r0000000000") | (r1 << 12) | r2;
  2418. WRITE4 (2, randint (MEM + 50, MEMEND - 50) & ~1);
  2419. }
  2420. TEST (mulul_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2421. {
  2422. int r1 = randint (0, 7);
  2423. int r2 = (r1 + randint (1, 7)) & 7; /* Assure r1 != r2 */
  2424. code[0] = R ("0100110000000rrr");
  2425. code[1] = R ("00000r0000000000") | (r1 << 12) | r2;
  2426. }
  2427. TEST (mulul_ind, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2428. {
  2429. int r1 = randint (0, 7);
  2430. int r2 = (r1 + randint (1, 7)) & 7; /* Assure r1 != r2 */
  2431. randomize_mem ();
  2432. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2433. code[0] = R ("0100110000000rrr") | (randint (2, 4) << 3);
  2434. code[1] = R ("00000r0000000000") | (r1 << 12) | r2;
  2435. }
  2436. TEST (mulul_d16, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  2437. {
  2438. int r1 = randint (0, 7);
  2439. int r2 = (r1 + randint (1, 7)) & 7; /* Assure r1 != r2 */
  2440. randomize_mem ();
  2441. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2442. code[0] = R ("0100110000101rrr");
  2443. code[1] = R ("00000r0000000000") | (r1 << 12) | r2;
  2444. code[2] = randint (-290, 290) & ~1;
  2445. }
  2446. TEST (mulul_absl, ALL_CCS, 4, WONT_CHANGE_MEMORY, NO_LIMIT)
  2447. {
  2448. int r1 = randint (0, 7);
  2449. int r2 = (r1 + randint (1, 7)) & 7; /* Assure r1 != r2 */
  2450. randomize_mem ();
  2451. code[0] = R ("0100110000111001");
  2452. code[1] = R ("00000r0000000000") | (r1 << 12) | r2;
  2453. WRITE4 (2, randint (MEM + 50, MEMEND - 50) & ~1);
  2454. }
  2455. TEST (nbcd_reg, X_BIT | Z_BIT | C_BIT, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2456. {
  2457. code[0] = R ("0100100000000rrr");
  2458. }
  2459. TEST (nbcd_ind, X_BIT | Z_BIT | C_BIT, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2460. {
  2461. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  2462. code[0] = R ("0100100000000rrr") | (randint (2, 4) << 3);
  2463. }
  2464. TEST (nbcd_d16, X_BIT | Z_BIT | C_BIT, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2465. {
  2466. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  2467. code[0] = R ("0100100000101rrr");
  2468. code[1] = randint (-290, 290);
  2469. }
  2470. TEST (nbcd_absl, X_BIT | Z_BIT | C_BIT, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2471. {
  2472. code[0] = B ("0100100000111001");
  2473. WRITE4 (1, randint (MEM + 50, MEMEND - 50));
  2474. }
  2475. TEST (neg_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2476. {
  2477. code[0] = R ("0100010000000rrr") | RANDOM_SIZE ();
  2478. }
  2479. TEST (negb_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2480. {
  2481. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  2482. code[0] = R ("0100010000000rrr") | (randint (2, 4) << 3);
  2483. }
  2484. TEST (negwl_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2485. {
  2486. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2487. code[0] = (R ("0100010000000rrr")
  2488. | (randint (2, 4) << 3)
  2489. | (randint (1, 2) << 6));
  2490. }
  2491. TEST (negb_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2492. {
  2493. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  2494. code[0] = R ("0100010000101rrr");
  2495. code[1] = randint (-290, 290);
  2496. }
  2497. TEST (negwl_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2498. {
  2499. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2500. code[0] = (R ("0100010000101rrr") | (randint (1, 2) << 6));
  2501. code[1] = randint (-290, 290) & ~1;
  2502. }
  2503. TEST (neg_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2504. {
  2505. code[0] = B ("0100010000111001") | RANDOM_SIZE ();
  2506. WRITE4 (1, randint (MEM + 50, MEMEND - 50) & ~1);
  2507. }
  2508. TEST (negx_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2509. {
  2510. code[0] = R ("0100000000000rrr") | RANDOM_SIZE ();
  2511. }
  2512. TEST (negxb_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2513. {
  2514. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  2515. code[0] = R ("0100000000000rrr") | (randint (2, 4) << 3);
  2516. }
  2517. TEST (negxwl_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2518. {
  2519. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2520. code[0] = (R ("0100000000000rrr")
  2521. | (randint (2, 4) << 3)
  2522. | (randint (1, 2) << 6));
  2523. }
  2524. TEST (negxb_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2525. {
  2526. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  2527. code[0] = R ("0100000000101rrr");
  2528. code[1] = randint (-290, 290);
  2529. }
  2530. TEST (negxwl_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2531. {
  2532. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2533. code[0] = (R ("0100000000101rrr") | (randint (1, 2) << 6));
  2534. code[1] = randint (-290, 290) & ~1;
  2535. }
  2536. TEST (negx_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2537. {
  2538. code[0] = B ("0100000000111001") | RANDOM_SIZE ();
  2539. WRITE4 (1, randint (MEM + 50, MEMEND - 50) & ~1);
  2540. }
  2541. TEST (nop, ALL_CCS, 1, WONT_CHANGE_MEMORY, 1)
  2542. {
  2543. code[0] = B ("0100111001110001");
  2544. }
  2545. TEST (not_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2546. {
  2547. code[0] = R ("0100011000000rrr") | RANDOM_SIZE ();
  2548. }
  2549. TEST (notb_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2550. {
  2551. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  2552. code[0] = R ("0100011000000rrr") | (randint (2, 4) << 3);
  2553. }
  2554. TEST (notwl_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2555. {
  2556. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2557. code[0] = (R ("0100011000000rrr")
  2558. | (randint (2, 4) << 3)
  2559. | (randint (1, 2) << 6));
  2560. }
  2561. TEST (notb_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2562. {
  2563. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  2564. code[0] = R ("0100011000101rrr");
  2565. code[1] = randint (-290, 290);
  2566. }
  2567. TEST (notwl_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2568. {
  2569. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2570. code[0] = (R ("0100011000101rrr") | (randint (1, 2) << 6));
  2571. code[1] = randint (-290, 290) & ~1;
  2572. }
  2573. TEST (not_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2574. {
  2575. code[0] = B ("0100011000111001") | RANDOM_SIZE ();
  2576. WRITE4 (1, randint (MEM + 50, MEMEND - 50) & ~1);
  2577. }
  2578. TEST (or_dreg_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2579. {
  2580. code[0] = R ("1000rrr000000rrr") | RANDOM_SIZE ();
  2581. }
  2582. TEST (or_ind_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2583. {
  2584. randomize_mem ();
  2585. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2586. code[0] = (R ("1000rrr000000rrr")
  2587. | RANDOM_SIZE ()
  2588. | (randint (2, 4) << 3));
  2589. }
  2590. TEST (or_d16_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2591. {
  2592. randomize_mem ();
  2593. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2594. code[0] = R ("1000rrr000101rrr") | RANDOM_SIZE ();
  2595. code[1] = randint (-290, 290) & ~1;
  2596. }
  2597. TEST (or_absl_dreg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  2598. {
  2599. randomize_mem ();
  2600. code[0] = R ("1000rrr000111001") | RANDOM_SIZE ();
  2601. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  2602. }
  2603. TEST (orbw_const_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2604. {
  2605. code[0] = R ("1000rrr00r111100"); /* randomly byte or word */
  2606. code[1] = randnum ();
  2607. }
  2608. TEST (orl_const_dreg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  2609. {
  2610. code[0] = R ("1000rrr010111100");
  2611. WRITE4 (1, randnum ());
  2612. }
  2613. TEST (or_dreg_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2614. {
  2615. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2616. code[0] = (R ("1000rrr100000rrr")
  2617. | RANDOM_SIZE ()
  2618. | (randint (2, 4) << 3));
  2619. }
  2620. TEST (or_dreg_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2621. {
  2622. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2623. code[0] = R ("1000rrr100101rrr") | RANDOM_SIZE ();
  2624. code[1] = randint (-290, 290) & ~1;
  2625. }
  2626. TEST (or_dreg_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2627. {
  2628. code[0] = R ("1000rrr100111001") | RANDOM_SIZE ();
  2629. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  2630. }
  2631. TEST (oribw_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2632. {
  2633. code[0] = R ("000000000r000rrr");
  2634. code[1] = randnum ();
  2635. }
  2636. TEST (oril_dreg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  2637. {
  2638. code[0] = R ("0000000010000rrr");
  2639. WRITE4 (1, randnum ());
  2640. }
  2641. TEST (oribw_ind, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2642. {
  2643. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2644. code[0] = R ("000000000r000rrr") | (randint (2, 4) << 3);
  2645. code[1] = randnum ();
  2646. }
  2647. TEST (oril_ind, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2648. {
  2649. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2650. code[0] = R ("0000000010000rrr") | (randint (2, 4) << 3);
  2651. WRITE4 (1, randnum ());
  2652. }
  2653. TEST (oribw_d16, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2654. {
  2655. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2656. code[0] = R ("000000000r101rrr"); /* randomly either byte or word. */
  2657. code[1] = randnum ();
  2658. code[2] = randint (-290, 290) & ~1;
  2659. }
  2660. TEST (oril_d16, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2661. {
  2662. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2663. code[0] = R ("0000000010101rrr");
  2664. WRITE4 (1, randnum ());
  2665. code[3] = randint (-290, 290) & ~1;
  2666. }
  2667. TEST (oribw_absl, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2668. {
  2669. code[0] = R ("000000000r111001");
  2670. code[1] = randnum ();
  2671. WRITE4 (2, randint (MEM + 4, MEMEND - 4) & ~1);
  2672. }
  2673. TEST (oril_absl, ALL_CCS, 5, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2674. {
  2675. code[0] = B ("0000000010111001");
  2676. WRITE4 (1, randnum ());
  2677. WRITE4 (3, randint (MEM + 4, MEMEND - 4) & ~1);
  2678. }
  2679. TEST (ori_to_ccr, ALL_CCS, 2, WONT_CHANGE_MEMORY, 32)
  2680. {
  2681. code[0] = B ("0000000000111100");
  2682. code[1] = times_called;
  2683. }
  2684. TEST (pack_reg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2685. {
  2686. code[0] = R ("1000rrr101000rrr");
  2687. code[1] = randnum ();
  2688. }
  2689. TEST (pack_mem, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2690. {
  2691. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  2692. code[0] = R ("1000rrr101001rrr");
  2693. code[1] = randnum ();
  2694. }
  2695. TEST (pea_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2696. {
  2697. EM_A7 = randint (MEM + 50, MEMEND - 50) & ~1;
  2698. code[0] = R ("0100100001010rrr");
  2699. }
  2700. TEST (pea_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2701. {
  2702. EM_A7 = randint (MEM + 50, MEMEND - 50) & ~1;
  2703. code[0] = R ("0100100001101rrr");
  2704. code[1] = randnum ();
  2705. }
  2706. TEST (pea_absw, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2707. {
  2708. EM_A7 = randint (MEM + 50, MEMEND - 50) & ~1;
  2709. code[0] = B ("0100100001111000");
  2710. code[1] = randnum ();
  2711. }
  2712. TEST (pea_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2713. {
  2714. EM_A7 = randint (MEM + 50, MEMEND - 50) & ~1;
  2715. code[0] = B ("0100100001111001");
  2716. WRITE4 (1, randnum ());
  2717. }
  2718. TEST (rol_dx_dy, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2719. {
  2720. code[0] = R ("1110rrr100111rrr") | RANDOM_SIZE ();
  2721. }
  2722. TEST (rol_const_dy, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2723. {
  2724. code[0] = R ("1110rrr100011rrr") | RANDOM_SIZE ();
  2725. }
  2726. TEST (rol_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2727. {
  2728. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2729. code[0] = R ("1110011111000rrr") | (randint (2, 4) << 3);
  2730. }
  2731. TEST (rol_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2732. {
  2733. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2734. code[0] = R ("1110011111101rrr");
  2735. code[1] = randint (-290, 290) & ~1;
  2736. }
  2737. TEST (rol_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2738. {
  2739. code[0] = B ("1110011111111001");
  2740. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  2741. }
  2742. TEST (ror_dx_dy, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2743. {
  2744. code[0] = R ("1110rrr000111rrr") | RANDOM_SIZE ();
  2745. }
  2746. TEST (ror_const_dy, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2747. {
  2748. code[0] = R ("1110rrr000011rrr") | RANDOM_SIZE ();
  2749. }
  2750. TEST (ror_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2751. {
  2752. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2753. code[0] = R ("1110011011000rrr") | (randint (2, 4) << 3);
  2754. }
  2755. TEST (ror_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2756. {
  2757. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2758. code[0] = R ("1110011011101rrr");
  2759. code[1] = randint (-290, 290) & ~1;
  2760. }
  2761. TEST (ror_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2762. {
  2763. code[0] = B ("1110011011111001");
  2764. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  2765. }
  2766. TEST (roxl_dx_dy, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2767. {
  2768. code[0] = R ("1110rrr100110rrr") | RANDOM_SIZE ();
  2769. }
  2770. TEST (roxl_const_dy, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2771. {
  2772. code[0] = R ("1110rrr100010rrr") | RANDOM_SIZE ();
  2773. }
  2774. TEST (roxl_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2775. {
  2776. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2777. code[0] = R ("1110010111000rrr") | (randint (2, 4) << 3);
  2778. }
  2779. TEST (roxl_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2780. {
  2781. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2782. code[0] = R ("1110010111101rrr");
  2783. code[1] = randint (-290, 290) & ~1;
  2784. }
  2785. TEST (roxl_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2786. {
  2787. code[0] = B ("1110010111111001");
  2788. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  2789. }
  2790. TEST (roxr_dx_dy, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2791. {
  2792. code[0] = R ("1110rrr000110rrr") | RANDOM_SIZE ();
  2793. }
  2794. TEST (roxr_const_dy, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2795. {
  2796. code[0] = R ("1110rrr000010rrr") | RANDOM_SIZE ();
  2797. }
  2798. TEST (roxr_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2799. {
  2800. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2801. code[0] = R ("1110010011000rrr") | (randint (2, 4) << 3);
  2802. }
  2803. TEST (roxr_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2804. {
  2805. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2806. code[0] = R ("1110010011101rrr");
  2807. code[1] = randint (-290, 290) & ~1;
  2808. }
  2809. TEST (roxr_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2810. {
  2811. code[0] = B ("1110010011111001");
  2812. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  2813. }
  2814. TEST (rtd, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2815. {
  2816. uint32 addr;
  2817. randomize_mem ();
  2818. EM_A7 = randint (MEM + 50, MEMEND - 50) & ~1;
  2819. addr = US_TO_SYN68K (&code[2]);
  2820. ((uint8 *)(SYN68K_TO_US (EM_A7)))[0] = addr >> 24;
  2821. ((uint8 *)(SYN68K_TO_US (EM_A7)))[1] = addr >> 16;
  2822. ((uint8 *)(SYN68K_TO_US (EM_A7)))[2] = addr >> 8;
  2823. ((uint8 *)(SYN68K_TO_US (EM_A7)))[3] = addr;
  2824. code[0] = B ("0100111001110100");
  2825. code[1] = randnum ();
  2826. }
  2827. TEST (rtr, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2828. {
  2829. uint32 addr, randcc;
  2830. randomize_mem ();
  2831. EM_A7 = randint (MEM + 50, MEMEND - 50) & ~1;
  2832. addr = US_TO_SYN68K (&code[1]);
  2833. randcc = randnum ();
  2834. ((uint8 *)(SYN68K_TO_US (EM_A7)))[0] = randcc >> 8;
  2835. ((uint8 *)(SYN68K_TO_US (EM_A7)))[1] = randcc;
  2836. ((uint8 *)(SYN68K_TO_US (EM_A7)))[2] = addr >> 24;
  2837. ((uint8 *)(SYN68K_TO_US (EM_A7)))[3] = addr >> 16;
  2838. ((uint8 *)(SYN68K_TO_US (EM_A7)))[4] = addr >> 8;
  2839. ((uint8 *)(SYN68K_TO_US (EM_A7)))[5] = addr;
  2840. code[0] = B ("0100111001110111");
  2841. }
  2842. TEST (rts, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2843. {
  2844. uint32 addr;
  2845. randomize_mem ();
  2846. EM_A7 = randint (MEM + 50, MEMEND - 50) & ~1;
  2847. addr = US_TO_SYN68K (&code[1]);
  2848. ((uint8 *)(SYN68K_TO_US (EM_A7)))[0] = addr >> 24;
  2849. ((uint8 *)(SYN68K_TO_US (EM_A7)))[1] = addr >> 16;
  2850. ((uint8 *)(SYN68K_TO_US (EM_A7)))[2] = addr >> 8;
  2851. ((uint8 *)(SYN68K_TO_US (EM_A7)))[3] = addr;
  2852. code[0] = B ("0100111001110101");
  2853. }
  2854. TEST (sbcd_reg, X_BIT | Z_BIT | C_BIT, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2855. {
  2856. code[0] = R ("1000rrr100000rrr");
  2857. }
  2858. TEST (sbcd_mem, X_BIT | Z_BIT | C_BIT, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2859. {
  2860. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  2861. code[0] = R ("1000rrr100001rrr");
  2862. }
  2863. TEST (Scc_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2864. {
  2865. code[0] = R ("0101rrrr11000rrr");
  2866. }
  2867. TEST (Scc_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2868. {
  2869. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  2870. code[0] = R ("0101rrrr11000rrr") | (randint (2, 4) << 3);
  2871. }
  2872. TEST (Scc_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2873. {
  2874. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  2875. code[0] = R ("0101rrrr11101rrr");
  2876. code[1] = randint (-290, 290);
  2877. }
  2878. TEST (Scc_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2879. {
  2880. code[0] = R ("0101rrrr11111001");
  2881. WRITE4 (1, randint (MEM + 50, MEMEND - 50));
  2882. }
  2883. TEST (subb_dreg_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2884. {
  2885. code[0] = R ("1001rrr000000rrr");
  2886. }
  2887. TEST (subw_reg_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2888. {
  2889. code[0] = R ("1001rrr00100rrrr");
  2890. }
  2891. TEST (subl_reg_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2892. {
  2893. code[0] = R ("1001rrr01000rrrr");
  2894. }
  2895. TEST (sub_ind_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2896. {
  2897. randomize_mem ();
  2898. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2899. code[0] = (R ("1001rrr000000rrr")
  2900. | RANDOM_SIZE ()
  2901. | (randint (2, 4) << 3)); /* Random amode [2, 4] */
  2902. }
  2903. TEST (sub_d16_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2904. {
  2905. randomize_mem ();
  2906. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2907. code[0] = R ("1001rrr000101rrr") | RANDOM_SIZE ();
  2908. code[1] = randint (-290, 290) & ~1;
  2909. }
  2910. TEST (sub_absl_dreg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  2911. {
  2912. randomize_mem ();
  2913. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2914. code[0] = R ("1001rrr000111001") | RANDOM_SIZE ();
  2915. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  2916. }
  2917. TEST (subb_const_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2918. {
  2919. code[0] = R ("1001rrr000111100");
  2920. code[1] = randint (0, 65535);
  2921. }
  2922. TEST (subw_const_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2923. {
  2924. code[0] = R ("1001rrr001111100");
  2925. code[1] = randint (0, 65535);
  2926. }
  2927. TEST (subl_const_dreg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  2928. {
  2929. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2930. code[0] = R ("1001rrr010111100");
  2931. code[1] = randint (0, 65535);
  2932. code[2] = randint (0, 65535);
  2933. }
  2934. TEST (sub_dreg_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2935. {
  2936. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2937. code[0] = (R ("1001rrr100000rrr")
  2938. | RANDOM_SIZE ()
  2939. | (randint (2, 4) << 3)); /* Random amode [2, 4] */
  2940. }
  2941. TEST (sub_dreg_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2942. {
  2943. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2944. code[0] = R ("1001rrr100101rrr") | RANDOM_SIZE ();
  2945. code[1] = randint (-290, 290) & ~1;
  2946. }
  2947. TEST (sub_dreg_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  2948. {
  2949. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2950. code[0] = R ("1001rrr100111001") | RANDOM_SIZE ();
  2951. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  2952. }
  2953. TEST (subaw_reg_areg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2954. {
  2955. code[0] = R ("1001rrr01100rrrr");
  2956. }
  2957. TEST (subal_reg_areg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2958. {
  2959. code[0] = R ("1001rrr11100rrrr");
  2960. }
  2961. TEST (suba_ind_areg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  2962. {
  2963. randomize_mem ();
  2964. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  2965. code[0] = (R ("1001rrrr11000rrr") /* Random size. */
  2966. | (randint (2, 4) << 3)); /* Random amode [2, 4]; */
  2967. }
  2968. TEST (suba_d16_areg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2969. {
  2970. randomize_mem ();
  2971. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2972. code[0] = R ("1001rrrr11101rrr"); /* Random size. */
  2973. code[1] = randint (-290, 290) & ~1;
  2974. }
  2975. TEST (suba_absl_areg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  2976. {
  2977. randomize_mem ();
  2978. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  2979. code[0] = R ("1001rrrr11111001"); /* Random size. */
  2980. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  2981. }
  2982. TEST (subaw_const_areg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2983. {
  2984. code[0] = R ("1001rrr011111100");
  2985. code[1] = randint (0, 65535);
  2986. }
  2987. TEST (subal_const_areg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  2988. {
  2989. code[0] = R ("1001rrr111111100");
  2990. code[1] = randint (0, 65535);
  2991. code[2] = randint (0, 65535);
  2992. }
  2993. TEST (subibw_dreg, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  2994. {
  2995. code[0] = R ("000001000r000rrr"); /* Randomly either byte or word */
  2996. code[1] = randnum ();
  2997. }
  2998. TEST (subil_dreg, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  2999. {
  3000. code[0] = R ("0000010010000rrr");
  3001. WRITE4 (1, randnum ());
  3002. }
  3003. TEST (subibw_ind, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  3004. {
  3005. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  3006. code[0] = (R ("000001000r000rrr") /* Randomly either byte or word. */
  3007. | (randint (2, 4) << 3)); /* Random amode [2, 4] */
  3008. code[1] = randnum ();
  3009. }
  3010. TEST (subil_ind, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  3011. {
  3012. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  3013. code[0] = (R ("0000010010000rrr")
  3014. | (randint (2, 4) << 3)); /* Random amode [2, 4] */
  3015. WRITE4 (1, randnum ());
  3016. }
  3017. TEST (subibw_d16, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  3018. {
  3019. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  3020. code[0] = R ("000001000r101rrr"); /* Randomly either byte or word. */
  3021. code[1] = randnum ();
  3022. code[2] = randint (-290, 290) & ~1;
  3023. }
  3024. TEST (subil_d16, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  3025. {
  3026. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  3027. code[0] = R ("0000010010101rrr");
  3028. WRITE4 (1, randnum ());
  3029. code[3] = randint (-290, 290) & ~1;
  3030. }
  3031. TEST (subibw_absl, ALL_CCS, 4, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  3032. {
  3033. code[0] = R ("000001000r111001"); /* Randomly either byte or word. */
  3034. code[1] = randnum ();
  3035. WRITE4 (2, randint (MEM + 4, MEMEND - 4) & ~1);
  3036. }
  3037. TEST (subil_absl, ALL_CCS, 5, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  3038. {
  3039. code[0] = R ("0000010010111001"); /* Randomly either byte or word. */
  3040. WRITE4 (1, randnum ());
  3041. WRITE4 (3, randint (MEM + 4, MEMEND - 4) & ~1);
  3042. }
  3043. TEST (subq_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  3044. {
  3045. code[0] = R ("0101rrr100000rrr") | RANDOM_SIZE ();
  3046. }
  3047. TEST (subq_areg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  3048. {
  3049. code[0] = R ("0101rrr100001rrr") | (randint (1, 2) << 6); /* word or long */
  3050. }
  3051. TEST (subq_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  3052. {
  3053. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  3054. code[0] = (R ("0101rrr100000rrr")
  3055. | RANDOM_SIZE ()
  3056. | (randint (2, 4) << 3)); /* random amode [2, 4] */
  3057. }
  3058. TEST (subq_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  3059. {
  3060. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  3061. code[0] = R ("0101rrr100101rrr") | RANDOM_SIZE ();
  3062. code[1] = randint (-290, 290) & ~1;
  3063. }
  3064. TEST (subq_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  3065. {
  3066. code[0] = R ("0101rrr100111001") | RANDOM_SIZE ();
  3067. WRITE4 (1, randint (MEM + 4, MEMEND - 4) & ~1);
  3068. }
  3069. TEST (subx_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  3070. {
  3071. code[0] = R ("1001rrr100000rrr") | RANDOM_SIZE ();
  3072. }
  3073. TEST (subx_mem, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  3074. {
  3075. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  3076. code[0] = R ("1001rrr100001rrr") | RANDOM_SIZE ();
  3077. }
  3078. TEST (swap, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  3079. {
  3080. code[0] = R ("0100100001000rrr");
  3081. }
  3082. TEST (tas_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  3083. {
  3084. code[0] = R ("0100101011000rrr");
  3085. }
  3086. TEST (tas_ind, ALL_CCS, 1, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  3087. {
  3088. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  3089. code[0] = R ("0100101011000rrr") | (randint (2, 4) << 3);
  3090. }
  3091. TEST (tas_d16, ALL_CCS, 2, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  3092. {
  3093. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  3094. code[0] = R ("0100101011101rrr");
  3095. code[1] = randint (-290, 290);
  3096. }
  3097. TEST (tas_absl, ALL_CCS, 3, MIGHT_CHANGE_MEMORY, NO_LIMIT)
  3098. {
  3099. code[0] = B ("0100101011111001");
  3100. WRITE4 (1, randint (MEM + 50, MEMEND - 50));
  3101. }
  3102. TEST (tstb_dreg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  3103. {
  3104. randomize_mem ();
  3105. code[0] = R ("0100101000000rrr");
  3106. }
  3107. TEST (tstwl_reg, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  3108. {
  3109. randomize_mem ();
  3110. code[0] = R ("010010100000rrrr") | (randint (1, 2) << 6);
  3111. }
  3112. TEST (tstb_ind, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  3113. {
  3114. randomize_mem ();
  3115. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 0);
  3116. code[0] = R ("0100101000000rrr") | (randint (2, 4) << 3);
  3117. }
  3118. TEST (tstwl_ind, ALL_CCS, 1, WONT_CHANGE_MEMORY, NO_LIMIT)
  3119. {
  3120. randomize_mem ();
  3121. randomize_regs (8, 8 + 7, MEM + 50, MEMEND - 50, 1);
  3122. code[0] = (R ("0100101000000rrr")
  3123. | (randint (1, 2) << 6) /* Randomly word or long */
  3124. | (randint (2, 4) << 3)); /* Random amode [2, 4] */
  3125. }
  3126. TEST (tstb_d16, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  3127. {
  3128. randomize_mem ();
  3129. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 0);
  3130. code[0] = R ("0100101000101rrr");
  3131. code[1] = randint (-290, 290);
  3132. }
  3133. TEST (tstwl_d16, ALL_CCS, 2, WONT_CHANGE_MEMORY, NO_LIMIT)
  3134. {
  3135. randomize_mem ();
  3136. randomize_regs (8, 8 + 7, MEM + 300, MEMEND - 300, 1);
  3137. code[0] = R ("0100101000101rrr");
  3138. code[1] = randint (-290, 290);
  3139. }
  3140. TEST (tst_absl, ALL_CCS, 3, WONT_CHANGE_MEMORY, NO_LIMIT)
  3141. {
  3142. randomize_mem ();
  3143. code[0] = B ("0100101000111001") | RANDOM_SIZE ();
  3144. WRITE4 (1, randint (MEM + 50, MEMEND - 50) & ~1);
  3145. }