PageRenderTime 52ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/test/tests.c

https://github.com/salty-horse/syn68k
C | 4105 lines | 3077 code | 960 blank | 68 comment | 84 complexity | da3e32b1e548277369befce9a7478c91 MD5 | raw file

Large files files are truncated, but you can click here to view the full 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

Large files files are truncated, but you can click here to view the full file