ftest.S 29 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456
  1. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2. MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
  3. M68000 Hi-Performance Microprocessor Division
  4. M68060 Software Package
  5. Production Release P1.00 -- October 10, 1994
  6. M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved.
  7. THE SOFTWARE is provided on an "AS IS" basis and without warranty.
  8. To the maximum extent permitted by applicable law,
  9. MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
  10. INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
  11. and any warranty against infringement with regard to the SOFTWARE
  12. (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
  13. To the maximum extent permitted by applicable law,
  14. IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER
  15. (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
  16. BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS)
  17. ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.
  18. Motorola assumes no responsibility for the maintenance and support of the SOFTWARE.
  19. You are hereby granted a copyright license to use, modify, and distribute the SOFTWARE
  20. so long as this entire notice is retained without alteration in any modified and/or
  21. redistributed versions, and that such modified versions are clearly identified as such.
  22. No licenses are granted by implication, estoppel or otherwise under any patents
  23. or trademarks of Motorola, Inc.
  24. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  25. #############################################
  26. set SREGS, -64
  27. set IREGS, -128
  28. set IFPREGS, -224
  29. set SFPREGS, -320
  30. set IFPCREGS, -332
  31. set SFPCREGS, -344
  32. set ICCR, -346
  33. set SCCR, -348
  34. set TESTCTR, -352
  35. set DATA, -384
  36. #############################################
  37. TESTTOP:
  38. bra.l _060TESTS_
  39. short 0x0000
  40. bra.l _060TESTS_unimp
  41. short 0x0000
  42. bra.l _060TESTS_enable
  43. short 0x0000
  44. start_str:
  45. string "Testing 68060 FPSP started:\n"
  46. start_str_unimp:
  47. string "Testing 68060 FPSP unimplemented instruction started:\n"
  48. start_str_enable:
  49. string "Testing 68060 FPSP exception enabled started:\n"
  50. pass_str:
  51. string "passed\n"
  52. fail_str:
  53. string " failed\n"
  54. align 0x4
  55. chk_test:
  56. tst.l %d0
  57. bne.b test_fail
  58. test_pass:
  59. pea pass_str(%pc)
  60. bsr.l _print_str
  61. addq.l &0x4,%sp
  62. rts
  63. test_fail:
  64. mov.l %d1,-(%sp)
  65. bsr.l _print_num
  66. addq.l &0x4,%sp
  67. pea fail_str(%pc)
  68. bsr.l _print_str
  69. addq.l &0x4,%sp
  70. rts
  71. #############################################
  72. _060TESTS_:
  73. link %a6,&-384
  74. movm.l &0x3f3c,-(%sp)
  75. fmovm.x &0xff,-(%sp)
  76. pea start_str(%pc)
  77. bsr.l _print_str
  78. addq.l &0x4,%sp
  79. ### effadd
  80. clr.l TESTCTR(%a6)
  81. pea effadd_str(%pc)
  82. bsr.l _print_str
  83. addq.l &0x4,%sp
  84. bsr.l effadd_0
  85. bsr.l chk_test
  86. ### unsupp
  87. clr.l TESTCTR(%a6)
  88. pea unsupp_str(%pc)
  89. bsr.l _print_str
  90. addq.l &0x4,%sp
  91. bsr.l unsupp_0
  92. bsr.l chk_test
  93. ### ovfl non-maskable
  94. clr.l TESTCTR(%a6)
  95. pea ovfl_nm_str(%pc)
  96. bsr.l _print_str
  97. bsr.l ovfl_nm_0
  98. bsr.l chk_test
  99. ### unfl non-maskable
  100. clr.l TESTCTR(%a6)
  101. pea unfl_nm_str(%pc)
  102. bsr.l _print_str
  103. bsr.l unfl_nm_0
  104. bsr.l chk_test
  105. movm.l (%sp)+,&0x3cfc
  106. fmovm.x (%sp)+,&0xff
  107. unlk %a6
  108. rts
  109. _060TESTS_unimp:
  110. link %a6,&-384
  111. movm.l &0x3f3c,-(%sp)
  112. fmovm.x &0xff,-(%sp)
  113. pea start_str_unimp(%pc)
  114. bsr.l _print_str
  115. addq.l &0x4,%sp
  116. ### unimp
  117. clr.l TESTCTR(%a6)
  118. pea unimp_str(%pc)
  119. bsr.l _print_str
  120. addq.l &0x4,%sp
  121. bsr.l unimp_0
  122. bsr.l chk_test
  123. movm.l (%sp)+,&0x3cfc
  124. fmovm.x (%sp)+,&0xff
  125. unlk %a6
  126. rts
  127. _060TESTS_enable:
  128. link %a6,&-384
  129. movm.l &0x3f3c,-(%sp)
  130. fmovm.x &0xff,-(%sp)
  131. pea start_str_enable(%pc)
  132. bsr.l _print_str
  133. addq.l &0x4,%sp
  134. ### snan
  135. clr.l TESTCTR(%a6)
  136. pea snan_str(%pc)
  137. bsr.l _print_str
  138. bsr.l snan_0
  139. bsr.l chk_test
  140. ### operr
  141. clr.l TESTCTR(%a6)
  142. pea operr_str(%pc)
  143. bsr.l _print_str
  144. bsr.l operr_0
  145. bsr.l chk_test
  146. ### ovfl
  147. clr.l TESTCTR(%a6)
  148. pea ovfl_str(%pc)
  149. bsr.l _print_str
  150. bsr.l ovfl_0
  151. bsr.l chk_test
  152. ### unfl
  153. clr.l TESTCTR(%a6)
  154. pea unfl_str(%pc)
  155. bsr.l _print_str
  156. bsr.l unfl_0
  157. bsr.l chk_test
  158. ### dz
  159. clr.l TESTCTR(%a6)
  160. pea dz_str(%pc)
  161. bsr.l _print_str
  162. bsr.l dz_0
  163. bsr.l chk_test
  164. ### inexact
  165. clr.l TESTCTR(%a6)
  166. pea inex_str(%pc)
  167. bsr.l _print_str
  168. bsr.l inex_0
  169. bsr.l chk_test
  170. movm.l (%sp)+,&0x3cfc
  171. fmovm.x (%sp)+,&0xff
  172. unlk %a6
  173. rts
  174. #############################################
  175. #############################################
  176. unimp_str:
  177. string "\tUnimplemented FP instructions..."
  178. align 0x4
  179. unimp_0:
  180. addq.l &0x1,TESTCTR(%a6)
  181. movm.l DEF_REGS(%pc),&0x3fff
  182. fmovm.x DEF_FPREGS(%pc),&0xff
  183. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  184. mov.w &0x0000,ICCR(%a6)
  185. movm.l &0x7fff,IREGS(%a6)
  186. fmovm.x &0xff,IFPREGS(%a6)
  187. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  188. mov.l &0x40000000,DATA+0x0(%a6)
  189. mov.l &0xc90fdaa2,DATA+0x4(%a6)
  190. mov.l &0x2168c235,DATA+0x8(%a6)
  191. mov.w &0x0000,%cc
  192. unimp_0_pc:
  193. fsin.x DATA(%a6),%fp0
  194. mov.w %cc,SCCR(%a6)
  195. movm.l &0x7fff,SREGS(%a6)
  196. fmovm.x &0xff,SFPREGS(%a6)
  197. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  198. mov.l &0xbfbf0000,IFPREGS+0x0(%a6)
  199. mov.l &0x80000000,IFPREGS+0x4(%a6)
  200. mov.l &0x00000000,IFPREGS+0x8(%a6)
  201. mov.l &0x08000208,IFPCREGS+0x4(%a6)
  202. lea unimp_0_pc(%pc),%a0
  203. mov.l %a0,IFPCREGS+0x8(%a6)
  204. bsr.l chkregs
  205. tst.b %d0
  206. bne.l error
  207. bsr.l chkfpregs
  208. tst.b %d0
  209. bne.l error
  210. unimp_1:
  211. addq.l &0x1,TESTCTR(%a6)
  212. movm.l DEF_REGS(%pc),&0x3fff
  213. fmovm.x DEF_FPREGS(%pc),&0xff
  214. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  215. mov.w &0x0000,ICCR(%a6)
  216. movm.l &0x7fff,IREGS(%a6)
  217. fmovm.x &0xff,IFPREGS(%a6)
  218. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  219. mov.l &0x3ffe0000,DATA+0x0(%a6)
  220. mov.l &0xc90fdaa2,DATA+0x4(%a6)
  221. mov.l &0x2168c235,DATA+0x8(%a6)
  222. mov.w &0x0000,%cc
  223. unimp_1_pc:
  224. ftan.x DATA(%a6),%fp0
  225. mov.w %cc,SCCR(%a6)
  226. movm.l &0x7fff,SREGS(%a6)
  227. fmovm.x &0xff,SFPREGS(%a6)
  228. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  229. mov.l &0x3fff0000,IFPREGS+0x0(%a6)
  230. mov.l &0x80000000,IFPREGS+0x4(%a6)
  231. mov.l &0x00000000,IFPREGS+0x8(%a6)
  232. mov.l &0x00000208,IFPCREGS+0x4(%a6)
  233. lea unimp_1_pc(%pc),%a0
  234. mov.l %a0,IFPCREGS+0x8(%a6)
  235. bsr.l chkregs
  236. tst.b %d0
  237. bne.l error
  238. bsr.l chkfpregs
  239. tst.b %d0
  240. bne.l error
  241. # fmovecr
  242. unimp_2:
  243. addq.l &0x1,TESTCTR(%a6)
  244. movm.l DEF_REGS(%pc),&0x3fff
  245. fmovm.x DEF_FPREGS(%pc),&0xff
  246. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  247. mov.w &0x0000,ICCR(%a6)
  248. movm.l &0x7fff,IREGS(%a6)
  249. fmovm.x &0xff,IFPREGS(%a6)
  250. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  251. mov.w &0x0000,%cc
  252. unimp_2_pc:
  253. fmovcr.x &0x31,%fp0
  254. mov.w %cc,SCCR(%a6)
  255. movm.l &0x7fff,SREGS(%a6)
  256. fmovm.x &0xff,SFPREGS(%a6)
  257. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  258. mov.l &0x40000000,IFPREGS+0x0(%a6)
  259. mov.l &0x935d8ddd,IFPREGS+0x4(%a6)
  260. mov.l &0xaaa8ac17,IFPREGS+0x8(%a6)
  261. mov.l &0x00000208,IFPCREGS+0x4(%a6)
  262. lea unimp_2_pc(%pc),%a0
  263. mov.l %a0,IFPCREGS+0x8(%a6)
  264. bsr.l chkregs
  265. tst.b %d0
  266. bne.l error
  267. bsr.l chkfpregs
  268. tst.b %d0
  269. bne.l error
  270. # fscc
  271. unimp_3:
  272. addq.l &0x1,TESTCTR(%a6)
  273. movm.l DEF_REGS(%pc),&0x3fff
  274. fmovm.x DEF_FPREGS(%pc),&0xff
  275. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  276. fmov.l &0x0f000000,%fpsr
  277. mov.l &0x00,%d7
  278. mov.w &0x0000,ICCR(%a6)
  279. movm.l &0x7fff,IREGS(%a6)
  280. fmovm.x &0xff,IFPREGS(%a6)
  281. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  282. mov.w &0x0000,%cc
  283. unimp_3_pc:
  284. fsgt %d7
  285. mov.w %cc,SCCR(%a6)
  286. movm.l &0x7fff,SREGS(%a6)
  287. fmovm.x &0xff,SFPREGS(%a6)
  288. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  289. mov.l &0x0f008080,IFPCREGS+0x4(%a6)
  290. lea unimp_3_pc(%pc),%a0
  291. mov.l %a0,IFPCREGS+0x8(%a6)
  292. bsr.l chkregs
  293. tst.b %d0
  294. bne.l error
  295. bsr.l chkfpregs
  296. tst.b %d0
  297. bne.l error
  298. # fdbcc
  299. unimp_4:
  300. addq.l &0x1,TESTCTR(%a6)
  301. movm.l DEF_REGS(%pc),&0x3fff
  302. fmovm.x DEF_FPREGS(%pc),&0xff
  303. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  304. fmov.l &0x0f000000,%fpsr
  305. mov.l &0x2,%d7
  306. mov.w &0x0000,ICCR(%a6)
  307. movm.l &0x7fff,IREGS(%a6)
  308. fmovm.x &0xff,IFPREGS(%a6)
  309. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  310. mov.w &0x0000,%cc
  311. unimp_4_pc:
  312. fdbgt.w %d7,unimp_4_pc
  313. mov.w %cc,SCCR(%a6)
  314. movm.l &0x7fff,SREGS(%a6)
  315. fmovm.x &0xff,SFPREGS(%a6)
  316. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  317. mov.w &0xffff,IREGS+28+2(%a6)
  318. mov.l &0x0f008080,IFPCREGS+0x4(%a6)
  319. lea unimp_4_pc(%pc),%a0
  320. mov.l %a0,IFPCREGS+0x8(%a6)
  321. bsr.l chkregs
  322. tst.b %d0
  323. bne.l error
  324. bsr.l chkfpregs
  325. tst.b %d0
  326. bne.l error
  327. # ftrapcc
  328. unimp_5:
  329. addq.l &0x1,TESTCTR(%a6)
  330. movm.l DEF_REGS(%pc),&0x3fff
  331. fmovm.x DEF_FPREGS(%pc),&0xff
  332. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  333. fmov.l &0x0f000000,%fpsr
  334. mov.w &0x0000,ICCR(%a6)
  335. movm.l &0x7fff,IREGS(%a6)
  336. fmovm.x &0xff,IFPREGS(%a6)
  337. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  338. mov.w &0x0000,%cc
  339. unimp_5_pc:
  340. ftpgt.l &0xabcdef01
  341. mov.w %cc,SCCR(%a6)
  342. movm.l &0x7fff,SREGS(%a6)
  343. fmovm.x &0xff,SFPREGS(%a6)
  344. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  345. mov.l &0x0f008080,IFPCREGS+0x4(%a6)
  346. lea unimp_5_pc(%pc),%a0
  347. mov.l %a0,IFPCREGS+0x8(%a6)
  348. bsr.l chkregs
  349. tst.b %d0
  350. bne.l error
  351. bsr.l chkfpregs
  352. tst.b %d0
  353. bne.l error
  354. clr.l %d0
  355. rts
  356. #############################################
  357. effadd_str:
  358. string "\tUnimplemented <ea>..."
  359. align 0x4
  360. effadd_0:
  361. addq.l &0x1,TESTCTR(%a6)
  362. movm.l DEF_REGS(%pc),&0x3fff
  363. fmovm.x DEF_FPREGS(%pc),&0xff
  364. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  365. mov.w &0x0000,ICCR(%a6)
  366. movm.l &0x7fff,IREGS(%a6)
  367. fmovm.x &0xff,IFPREGS(%a6)
  368. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  369. fmov.b &0x2,%fp0
  370. mov.w &0x0000,%cc
  371. effadd_0_pc:
  372. fmul.x &0xc00000008000000000000000,%fp0
  373. mov.w %cc,SCCR(%a6)
  374. movm.l &0x7fff,SREGS(%a6)
  375. fmovm.x &0xff,SFPREGS(%a6)
  376. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  377. mov.l &0xc0010000,IFPREGS+0x0(%a6)
  378. mov.l &0x80000000,IFPREGS+0x4(%a6)
  379. mov.l &0x00000000,IFPREGS+0x8(%a6)
  380. mov.l &0x08000000,IFPCREGS+0x4(%a6)
  381. lea effadd_0_pc(%pc),%a0
  382. mov.l %a0,IFPCREGS+0x8(%a6)
  383. bsr.l chkregs
  384. tst.b %d0
  385. bne.l error
  386. bsr.l chkfpregs
  387. tst.b %d0
  388. bne.l error
  389. effadd_1:
  390. addq.l &0x1,TESTCTR(%a6)
  391. movm.l DEF_REGS(%pc),&0x3fff
  392. fmovm.x DEF_FPREGS(%pc),&0xff
  393. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  394. mov.w &0x0000,ICCR(%a6)
  395. movm.l &0x7fff,IREGS(%a6)
  396. fmovm.x &0xff,IFPREGS(%a6)
  397. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  398. mov.w &0x0000,%cc
  399. effadd_1_pc:
  400. fabs.p &0xc12300012345678912345678,%fp0
  401. mov.w %cc,SCCR(%a6)
  402. movm.l &0x7fff,SREGS(%a6)
  403. fmovm.x &0xff,SFPREGS(%a6)
  404. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  405. mov.l &0x3e660000,IFPREGS+0x0(%a6)
  406. mov.l &0xd0ed23e8,IFPREGS+0x4(%a6)
  407. mov.l &0xd14035bc,IFPREGS+0x8(%a6)
  408. mov.l &0x00000108,IFPCREGS+0x4(%a6)
  409. lea effadd_1_pc(%pc),%a0
  410. mov.l %a0,IFPCREGS+0x8(%a6)
  411. bsr.l chkregs
  412. tst.b %d0
  413. bne.l error
  414. bsr.l chkfpregs
  415. tst.b %d0
  416. bne.l error
  417. fmovml_0:
  418. addq.l &0x1,TESTCTR(%a6)
  419. movm.l DEF_REGS(%pc),&0x3fff
  420. fmovm.x DEF_FPREGS(%pc),&0xff
  421. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  422. mov.w &0x0000,ICCR(%a6)
  423. mov.w &0x0000,%cc
  424. movm.l &0x7fff,IREGS(%a6)
  425. fmovm.x &0xff,IFPREGS(%a6)
  426. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  427. fmovm.l &0xffffffffffffffff,%fpcr,%fpsr
  428. mov.w %cc,SCCR(%a6)
  429. movm.l &0x7fff,SREGS(%a6)
  430. fmovm.x &0xff,SFPREGS(%a6)
  431. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  432. mov.l &0x0000fff0,IFPCREGS+0x0(%a6)
  433. mov.l &0x0ffffff8,IFPCREGS+0x4(%a6)
  434. bsr.l chkregs
  435. tst.b %d0
  436. bne.l error
  437. bsr.l chkfpregs
  438. tst.b %d0
  439. bne.l error
  440. fmovml_1:
  441. addq.l &0x1,TESTCTR(%a6)
  442. movm.l DEF_REGS(%pc),&0x3fff
  443. fmovm.x DEF_FPREGS(%pc),&0xff
  444. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  445. mov.w &0x0000,ICCR(%a6)
  446. mov.w &0x0000,%cc
  447. movm.l &0x7fff,IREGS(%a6)
  448. fmovm.x &0xff,IFPREGS(%a6)
  449. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  450. fmovm.l &0xffffffffffffffff,%fpcr,%fpiar
  451. mov.w %cc,SCCR(%a6)
  452. movm.l &0x7fff,SREGS(%a6)
  453. fmovm.x &0xff,SFPREGS(%a6)
  454. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  455. mov.l &0x0000fff0,IFPCREGS+0x0(%a6)
  456. mov.l &0xffffffff,IFPCREGS+0x8(%a6)
  457. bsr.l chkregs
  458. tst.b %d0
  459. bne.l error
  460. bsr.l chkfpregs
  461. tst.b %d0
  462. bne.l error
  463. fmovml_2:
  464. addq.l &0x1,TESTCTR(%a6)
  465. movm.l DEF_REGS(%pc),&0x3fff
  466. fmovm.x DEF_FPREGS(%pc),&0xff
  467. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  468. mov.w &0x0000,ICCR(%a6)
  469. mov.w &0x0000,%cc
  470. movm.l &0x7fff,IREGS(%a6)
  471. fmovm.x &0xff,IFPREGS(%a6)
  472. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  473. fmovm.l &0xffffffffffffffff,%fpsr,%fpiar
  474. mov.w %cc,SCCR(%a6)
  475. movm.l &0x7fff,SREGS(%a6)
  476. fmovm.x &0xff,SFPREGS(%a6)
  477. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  478. mov.l &0x0ffffff8,IFPCREGS+0x4(%a6)
  479. mov.l &0xffffffff,IFPCREGS+0x8(%a6)
  480. bsr.l chkregs
  481. tst.b %d0
  482. bne.l error
  483. bsr.l chkfpregs
  484. tst.b %d0
  485. bne.l error
  486. fmovml_3:
  487. addq.l &0x1,TESTCTR(%a6)
  488. movm.l DEF_REGS(%pc),&0x3fff
  489. fmovm.x DEF_FPREGS(%pc),&0xff
  490. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  491. mov.w &0x0000,ICCR(%a6)
  492. mov.w &0x0000,%cc
  493. movm.l &0x7fff,IREGS(%a6)
  494. fmovm.x &0xff,IFPREGS(%a6)
  495. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  496. fmovm.l &0xffffffffffffffffffffffff,%fpcr,%fpsr,%fpiar
  497. mov.w %cc,SCCR(%a6)
  498. movm.l &0x7fff,SREGS(%a6)
  499. fmovm.x &0xff,SFPREGS(%a6)
  500. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  501. mov.l &0x0000fff0,IFPCREGS+0x0(%a6)
  502. mov.l &0x0ffffff8,IFPCREGS+0x4(%a6)
  503. mov.l &0xffffffff,IFPCREGS+0x8(%a6)
  504. bsr.l chkregs
  505. tst.b %d0
  506. bne.l error
  507. bsr.l chkfpregs
  508. tst.b %d0
  509. bne.l error
  510. # fmovmx dynamic
  511. fmovmx_0:
  512. addq.l &0x1,TESTCTR(%a6)
  513. movm.l DEF_REGS(%pc),&0x3fff
  514. fmovm.x DEF_FPREGS(%pc),&0xff
  515. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  516. fmov.b &0x1,%fp0
  517. fmov.b &0x2,%fp1
  518. fmov.b &0x3,%fp2
  519. fmov.b &0x4,%fp3
  520. fmov.b &0x5,%fp4
  521. fmov.b &0x6,%fp5
  522. fmov.b &0x7,%fp6
  523. fmov.b &0x8,%fp7
  524. fmov.l &0x0,%fpiar
  525. mov.l &0xffffffaa,%d0
  526. mov.w &0x0000,ICCR(%a6)
  527. movm.l &0xffff,IREGS(%a6)
  528. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  529. fmovm.x &0xff,IFPREGS(%a6)
  530. mov.w &0x0000,%cc
  531. fmovm.x %d0,-(%sp)
  532. mov.w %cc,SCCR(%a6)
  533. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  534. fmov.s &0x7f800000,%fp1
  535. fmov.s &0x7f800000,%fp3
  536. fmov.s &0x7f800000,%fp5
  537. fmov.s &0x7f800000,%fp7
  538. fmov.x (%sp)+,%fp1
  539. fmov.x (%sp)+,%fp3
  540. fmov.x (%sp)+,%fp5
  541. fmov.x (%sp)+,%fp7
  542. movm.l &0xffff,SREGS(%a6)
  543. fmovm.x &0xff,SFPREGS(%a6)
  544. bsr.l chkregs
  545. tst.b %d0
  546. bne.l error
  547. bsr.l chkfpregs
  548. tst.b %d0
  549. bne.l error
  550. fmovmx_1:
  551. addq.l &0x1,TESTCTR(%a6)
  552. movm.l DEF_REGS(%pc),&0x3fff
  553. fmovm.x DEF_FPREGS(%pc),&0xff
  554. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  555. fmov.b &0x1,%fp0
  556. fmov.b &0x2,%fp1
  557. fmov.b &0x3,%fp2
  558. fmov.b &0x4,%fp3
  559. fmov.b &0x5,%fp4
  560. fmov.b &0x6,%fp5
  561. fmov.b &0x7,%fp6
  562. fmov.b &0x8,%fp7
  563. fmov.x %fp6,-(%sp)
  564. fmov.x %fp4,-(%sp)
  565. fmov.x %fp2,-(%sp)
  566. fmov.x %fp0,-(%sp)
  567. fmovm.x &0xff,IFPREGS(%a6)
  568. fmov.s &0x7f800000,%fp6
  569. fmov.s &0x7f800000,%fp4
  570. fmov.s &0x7f800000,%fp2
  571. fmov.s &0x7f800000,%fp0
  572. fmov.l &0x0,%fpiar
  573. fmov.l &0x0,%fpsr
  574. mov.l &0xffffffaa,%d0
  575. mov.w &0x0000,ICCR(%a6)
  576. movm.l &0xffff,IREGS(%a6)
  577. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  578. mov.w &0x0000,%cc
  579. fmovm.x (%sp)+,%d0
  580. mov.w %cc,SCCR(%a6)
  581. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  582. movm.l &0xffff,SREGS(%a6)
  583. fmovm.x &0xff,SFPREGS(%a6)
  584. bsr.l chkregs
  585. tst.b %d0
  586. bne.l error
  587. bsr.l chkfpregs
  588. tst.b %d0
  589. bne.l error
  590. fmovmx_2:
  591. addq.l &0x1,TESTCTR(%a6)
  592. movm.l DEF_REGS(%pc),&0x3fff
  593. fmovm.x DEF_FPREGS(%pc),&0xff
  594. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  595. fmov.b &0x1,%fp0
  596. fmov.b &0x2,%fp1
  597. fmov.b &0x3,%fp2
  598. fmov.b &0x4,%fp3
  599. fmov.b &0x5,%fp4
  600. fmov.b &0x6,%fp5
  601. fmov.b &0x7,%fp6
  602. fmov.b &0x8,%fp7
  603. fmov.l &0x0,%fpiar
  604. mov.l &0xffffff00,%d0
  605. mov.w &0x0000,ICCR(%a6)
  606. movm.l &0xffff,IREGS(%a6)
  607. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  608. fmovm.x &0xff,IFPREGS(%a6)
  609. mov.w &0x0000,%cc
  610. fmovm.x %d0,-(%sp)
  611. mov.w %cc,SCCR(%a6)
  612. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  613. movm.l &0xffff,SREGS(%a6)
  614. fmovm.x &0xff,SFPREGS(%a6)
  615. bsr.l chkregs
  616. tst.b %d0
  617. bne.l error
  618. bsr.l chkfpregs
  619. tst.b %d0
  620. bne.l error
  621. clr.l %d0
  622. rts
  623. ###########################################################
  624. # This test will take a non-maskable overflow directly.
  625. ovfl_nm_str:
  626. string "\tNon-maskable overflow..."
  627. align 0x4
  628. ovfl_nm_0:
  629. addq.l &0x1,TESTCTR(%a6)
  630. movm.l DEF_REGS(%pc),&0x3fff
  631. fmovm.x DEF_FPREGS(%pc),&0xff
  632. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  633. mov.w &0x0000,ICCR(%a6)
  634. movm.l &0x7fff,IREGS(%a6)
  635. fmovm.x &0xff,IFPREGS(%a6)
  636. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  637. fmov.b &0x2,%fp0
  638. mov.l &0x7ffe0000,DATA+0x0(%a6)
  639. mov.l &0x80000000,DATA+0x4(%a6)
  640. mov.l &0x00000000,DATA+0x8(%a6)
  641. mov.w &0x0000,%cc
  642. ovfl_nm_0_pc:
  643. fmul.x DATA(%a6),%fp0
  644. mov.w %cc,SCCR(%a6)
  645. movm.l &0x7fff,SREGS(%a6)
  646. fmovm.x &0xff,SFPREGS(%a6)
  647. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  648. mov.l &0x7fff0000,IFPREGS+0x0(%a6)
  649. mov.l &0x00000000,IFPREGS+0x4(%a6)
  650. mov.l &0x00000000,IFPREGS+0x8(%a6)
  651. mov.l &0x02001048,IFPCREGS+0x4(%a6)
  652. lea ovfl_nm_0_pc(%pc),%a0
  653. mov.l %a0,IFPCREGS+0x8(%a6)
  654. bsr.l chkregs
  655. tst.b %d0
  656. bne.l error
  657. bsr.l chkfpregs
  658. tst.b %d0
  659. bne.l error
  660. clr.l %d0
  661. rts
  662. ###########################################################
  663. # This test will take an overflow directly.
  664. ovfl_str:
  665. string "\tEnabled overflow..."
  666. align 0x4
  667. ovfl_0:
  668. addq.l &0x1,TESTCTR(%a6)
  669. movm.l DEF_REGS(%pc),&0x3fff
  670. fmovm.x DEF_FPREGS(%pc),&0xff
  671. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  672. mov.w &0x0000,ICCR(%a6)
  673. movm.l &0x7fff,IREGS(%a6)
  674. fmovm.x &0xff,IFPREGS(%a6)
  675. fmov.l &0x00001000,%fpcr
  676. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  677. fmov.b &0x2,%fp0
  678. mov.l &0x7ffe0000,DATA+0x0(%a6)
  679. mov.l &0x80000000,DATA+0x4(%a6)
  680. mov.l &0x00000000,DATA+0x8(%a6)
  681. mov.w &0x0000,%cc
  682. ovfl_0_pc:
  683. fmul.x DATA(%a6),%fp0
  684. mov.w %cc,SCCR(%a6)
  685. movm.l &0x7fff,SREGS(%a6)
  686. fmovm.x &0xff,SFPREGS(%a6)
  687. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  688. mov.l &0x7fff0000,IFPREGS+0x0(%a6)
  689. mov.l &0x00000000,IFPREGS+0x4(%a6)
  690. mov.l &0x00000000,IFPREGS+0x8(%a6)
  691. mov.l &0x02001048,IFPCREGS+0x4(%a6)
  692. lea ovfl_0_pc(%pc),%a0
  693. mov.l %a0,IFPCREGS+0x8(%a6)
  694. bsr.l chkregs
  695. tst.b %d0
  696. bne.l error
  697. bsr.l chkfpregs
  698. tst.b %d0
  699. bne.l error
  700. clr.l %d0
  701. rts
  702. #####################################################################
  703. # This test will take an underflow directly.
  704. unfl_str:
  705. string "\tEnabled underflow..."
  706. align 0x4
  707. unfl_0:
  708. addq.l &0x1,TESTCTR(%a6)
  709. movm.l DEF_REGS(%pc),&0x3fff
  710. fmovm.x DEF_FPREGS(%pc),&0xff
  711. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  712. mov.w &0x0000,ICCR(%a6)
  713. movm.l &0x7fff,IREGS(%a6)
  714. fmovm.x &0xff,IFPREGS(%a6)
  715. fmov.l &0x00000800,%fpcr
  716. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  717. mov.l &0x00000000,DATA+0x0(%a6)
  718. mov.l &0x80000000,DATA+0x4(%a6)
  719. mov.l &0x00000000,DATA+0x8(%a6)
  720. fmovm.x DATA(%a6),&0x80
  721. mov.w &0x0000,%cc
  722. unfl_0_pc:
  723. fdiv.b &0x2,%fp0
  724. mov.w %cc,SCCR(%a6)
  725. movm.l &0x7fff,SREGS(%a6)
  726. fmovm.x &0xff,SFPREGS(%a6)
  727. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  728. mov.l &0x00000000,IFPREGS+0x0(%a6)
  729. mov.l &0x40000000,IFPREGS+0x4(%a6)
  730. mov.l &0x00000000,IFPREGS+0x8(%a6)
  731. mov.l &0x00000800,IFPCREGS+0x4(%a6)
  732. lea unfl_0_pc(%pc),%a0
  733. mov.l %a0,IFPCREGS+0x8(%a6)
  734. bsr.l chkregs
  735. tst.b %d0
  736. bne.l error
  737. bsr.l chkfpregs
  738. tst.b %d0
  739. bne.l error
  740. clr.l %d0
  741. rts
  742. #####################################################################
  743. # This test will take a non-maskable underflow directly.
  744. unfl_nm_str:
  745. string "\tNon-maskable underflow..."
  746. align 0x4
  747. unfl_nm_0:
  748. addq.l &0x1,TESTCTR(%a6)
  749. movm.l DEF_REGS(%pc),&0x3fff
  750. fmovm.x DEF_FPREGS(%pc),&0xff
  751. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  752. mov.w &0x0000,ICCR(%a6)
  753. movm.l &0x7fff,IREGS(%a6)
  754. fmovm.x &0xff,IFPREGS(%a6)
  755. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  756. mov.l &0x00000000,DATA+0x0(%a6)
  757. mov.l &0x80000000,DATA+0x4(%a6)
  758. mov.l &0x00000000,DATA+0x8(%a6)
  759. fmovm.x DATA(%a6),&0x80
  760. mov.w &0x0000,%cc
  761. unfl_nm_0_pc:
  762. fdiv.b &0x2,%fp0
  763. mov.w %cc,SCCR(%a6)
  764. movm.l &0x7fff,SREGS(%a6)
  765. fmovm.x &0xff,SFPREGS(%a6)
  766. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  767. mov.l &0x00000000,IFPREGS+0x0(%a6)
  768. mov.l &0x40000000,IFPREGS+0x4(%a6)
  769. mov.l &0x00000000,IFPREGS+0x8(%a6)
  770. mov.l &0x00000800,IFPCREGS+0x4(%a6)
  771. lea unfl_nm_0_pc(%pc),%a0
  772. mov.l %a0,IFPCREGS+0x8(%a6)
  773. bsr.l chkregs
  774. tst.b %d0
  775. bne.l error
  776. bsr.l chkfpregs
  777. tst.b %d0
  778. bne.l error
  779. clr.l %d0
  780. rts
  781. #####################################################################
  782. inex_str:
  783. string "\tEnabled inexact..."
  784. align 0x4
  785. inex_0:
  786. addq.l &0x1,TESTCTR(%a6)
  787. movm.l DEF_REGS(%pc),&0x3fff
  788. fmovm.x DEF_FPREGS(%pc),&0xff
  789. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  790. mov.w &0x0000,ICCR(%a6)
  791. movm.l &0x7fff,IREGS(%a6)
  792. fmovm.x &0xff,IFPREGS(%a6)
  793. fmov.l &0x00000200,%fpcr # enable inexact
  794. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  795. mov.l &0x50000000,DATA+0x0(%a6)
  796. mov.l &0x80000000,DATA+0x4(%a6)
  797. mov.l &0x00000000,DATA+0x8(%a6)
  798. fmovm.x DATA(%a6),&0x80
  799. mov.w &0x0000,%cc
  800. inex_0_pc:
  801. fadd.b &0x2,%fp0
  802. mov.w %cc,SCCR(%a6)
  803. movm.l &0x7fff,SREGS(%a6)
  804. fmovm.x &0xff,SFPREGS(%a6)
  805. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  806. mov.l &0x50000000,IFPREGS+0x0(%a6)
  807. mov.l &0x80000000,IFPREGS+0x4(%a6)
  808. mov.l &0x00000000,IFPREGS+0x8(%a6)
  809. mov.l &0x00000208,IFPCREGS+0x4(%a6)
  810. lea inex_0_pc(%pc),%a0
  811. mov.l %a0,IFPCREGS+0x8(%a6)
  812. bsr.l chkregs
  813. tst.b %d0
  814. bne.l error
  815. bsr.l chkfpregs
  816. tst.b %d0
  817. bne.l error
  818. clr.l %d0
  819. rts
  820. #####################################################################
  821. snan_str:
  822. string "\tEnabled SNAN..."
  823. align 0x4
  824. snan_0:
  825. addq.l &0x1,TESTCTR(%a6)
  826. movm.l DEF_REGS(%pc),&0x3fff
  827. fmovm.x DEF_FPREGS(%pc),&0xff
  828. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  829. mov.w &0x0000,ICCR(%a6)
  830. movm.l &0x7fff,IREGS(%a6)
  831. fmovm.x &0xff,IFPREGS(%a6)
  832. fmov.l &0x00004000,%fpcr # enable SNAN
  833. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  834. mov.l &0xffff0000,DATA+0x0(%a6)
  835. mov.l &0x00000000,DATA+0x4(%a6)
  836. mov.l &0x00000001,DATA+0x8(%a6)
  837. fmovm.x DATA(%a6),&0x80
  838. mov.w &0x0000,%cc
  839. snan_0_pc:
  840. fadd.b &0x2,%fp0
  841. mov.w %cc,SCCR(%a6)
  842. movm.l &0x7fff,SREGS(%a6)
  843. fmovm.x &0xff,SFPREGS(%a6)
  844. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  845. mov.l &0xffff0000,IFPREGS+0x0(%a6)
  846. mov.l &0x00000000,IFPREGS+0x4(%a6)
  847. mov.l &0x00000001,IFPREGS+0x8(%a6)
  848. mov.l &0x09004080,IFPCREGS+0x4(%a6)
  849. lea snan_0_pc(%pc),%a0
  850. mov.l %a0,IFPCREGS+0x8(%a6)
  851. bsr.l chkregs
  852. tst.b %d0
  853. bne.l error
  854. bsr.l chkfpregs
  855. tst.b %d0
  856. bne.l error
  857. clr.l %d0
  858. rts
  859. #####################################################################
  860. operr_str:
  861. string "\tEnabled OPERR..."
  862. align 0x4
  863. operr_0:
  864. addq.l &0x1,TESTCTR(%a6)
  865. movm.l DEF_REGS(%pc),&0x3fff
  866. fmovm.x DEF_FPREGS(%pc),&0xff
  867. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  868. mov.w &0x0000,ICCR(%a6)
  869. movm.l &0x7fff,IREGS(%a6)
  870. fmovm.x &0xff,IFPREGS(%a6)
  871. fmov.l &0x00002000,%fpcr # enable OPERR
  872. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  873. mov.l &0xffff0000,DATA+0x0(%a6)
  874. mov.l &0x00000000,DATA+0x4(%a6)
  875. mov.l &0x00000000,DATA+0x8(%a6)
  876. fmovm.x DATA(%a6),&0x80
  877. mov.w &0x0000,%cc
  878. operr_0_pc:
  879. fadd.s &0x7f800000,%fp0
  880. mov.w %cc,SCCR(%a6)
  881. movm.l &0x7fff,SREGS(%a6)
  882. fmovm.x &0xff,SFPREGS(%a6)
  883. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  884. mov.l &0xffff0000,IFPREGS+0x0(%a6)
  885. mov.l &0x00000000,IFPREGS+0x4(%a6)
  886. mov.l &0x00000000,IFPREGS+0x8(%a6)
  887. mov.l &0x01002080,IFPCREGS+0x4(%a6)
  888. lea operr_0_pc(%pc),%a0
  889. mov.l %a0,IFPCREGS+0x8(%a6)
  890. bsr.l chkregs
  891. tst.b %d0
  892. bne.l error
  893. bsr.l chkfpregs
  894. tst.b %d0
  895. bne.l error
  896. clr.l %d0
  897. rts
  898. #####################################################################
  899. dz_str:
  900. string "\tEnabled DZ..."
  901. align 0x4
  902. dz_0:
  903. addq.l &0x1,TESTCTR(%a6)
  904. movm.l DEF_REGS(%pc),&0x3fff
  905. fmovm.x DEF_FPREGS(%pc),&0xff
  906. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  907. mov.w &0x0000,ICCR(%a6)
  908. movm.l &0x7fff,IREGS(%a6)
  909. fmovm.x &0xff,IFPREGS(%a6)
  910. fmov.l &0x00000400,%fpcr # enable DZ
  911. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  912. mov.l &0x40000000,DATA+0x0(%a6)
  913. mov.l &0x80000000,DATA+0x4(%a6)
  914. mov.l &0x00000000,DATA+0x8(%a6)
  915. fmovm.x DATA(%a6),&0x80
  916. mov.w &0x0000,%cc
  917. dz_0_pc:
  918. fdiv.b &0x0,%fp0
  919. mov.w %cc,SCCR(%a6)
  920. movm.l &0x7fff,SREGS(%a6)
  921. fmovm.x &0xff,SFPREGS(%a6)
  922. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  923. mov.l &0x40000000,IFPREGS+0x0(%a6)
  924. mov.l &0x80000000,IFPREGS+0x4(%a6)
  925. mov.l &0x00000000,IFPREGS+0x8(%a6)
  926. mov.l &0x02000410,IFPCREGS+0x4(%a6)
  927. lea dz_0_pc(%pc),%a0
  928. mov.l %a0,IFPCREGS+0x8(%a6)
  929. bsr.l chkregs
  930. tst.b %d0
  931. bne.l error
  932. bsr.l chkfpregs
  933. tst.b %d0
  934. bne.l error
  935. clr.l %d0
  936. rts
  937. #####################################################################
  938. unsupp_str:
  939. string "\tUnimplemented data type/format..."
  940. # an unnormalized number
  941. align 0x4
  942. unsupp_0:
  943. addq.l &0x1,TESTCTR(%a6)
  944. movm.l DEF_REGS(%pc),&0x3fff
  945. fmovm.x DEF_FPREGS(%pc),&0xff
  946. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  947. mov.w &0x0000,ICCR(%a6)
  948. movm.l &0x7fff,IREGS(%a6)
  949. fmovm.x &0xff,IFPREGS(%a6)
  950. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  951. mov.l &0xc03f0000,DATA+0x0(%a6)
  952. mov.l &0x00000000,DATA+0x4(%a6)
  953. mov.l &0x00000001,DATA+0x8(%a6)
  954. fmov.b &0x2,%fp0
  955. mov.w &0x0000,%cc
  956. unsupp_0_pc:
  957. fmul.x DATA(%a6),%fp0
  958. mov.w %cc,SCCR(%a6)
  959. movm.l &0x7fff,SREGS(%a6)
  960. fmovm.x &0xff,SFPREGS(%a6)
  961. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  962. mov.l &0xc0010000,IFPREGS+0x0(%a6)
  963. mov.l &0x80000000,IFPREGS+0x4(%a6)
  964. mov.l &0x00000000,IFPREGS+0x8(%a6)
  965. mov.l &0x08000000,IFPCREGS+0x4(%a6)
  966. lea unsupp_0_pc(%pc),%a0
  967. mov.l %a0,IFPCREGS+0x8(%a6)
  968. bsr.l chkregs
  969. tst.b %d0
  970. bne.l error
  971. bsr.l chkfpregs
  972. tst.b %d0
  973. bne.l error
  974. # a denormalized number
  975. unsupp_1:
  976. addq.l &0x1,TESTCTR(%a6)
  977. movm.l DEF_REGS(%pc),&0x3fff
  978. fmovm.x DEF_FPREGS(%pc),&0xff
  979. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  980. mov.w &0x0000,ICCR(%a6)
  981. movm.l &0x7fff,IREGS(%a6)
  982. fmovm.x &0xff,IFPREGS(%a6)
  983. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  984. mov.l &0x80000000,DATA+0x0(%a6)
  985. mov.l &0x01000000,DATA+0x4(%a6)
  986. mov.l &0x00000000,DATA+0x8(%a6)
  987. fmov.l &0x7fffffff,%fp0
  988. mov.w &0x0000,%cc
  989. unsupp_1_pc:
  990. fmul.x DATA(%a6),%fp0
  991. mov.w %cc,SCCR(%a6)
  992. movm.l &0x7fff,SREGS(%a6)
  993. fmovm.x &0xff,SFPREGS(%a6)
  994. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  995. mov.l &0x80170000,IFPREGS+0x0(%a6)
  996. mov.l &0xfffffffe,IFPREGS+0x4(%a6)
  997. mov.l &0x00000000,IFPREGS+0x8(%a6)
  998. mov.l &0x08000000,IFPCREGS+0x4(%a6)
  999. lea unsupp_1_pc(%pc),%a0
  1000. mov.l %a0,IFPCREGS+0x8(%a6)
  1001. bsr.l chkregs
  1002. tst.b %d0
  1003. bne.l error
  1004. bsr.l chkfpregs
  1005. tst.b %d0
  1006. bne.l error
  1007. # packed
  1008. unsupp_2:
  1009. addq.l &0x1,TESTCTR(%a6)
  1010. movm.l DEF_REGS(%pc),&0x3fff
  1011. fmovm.x DEF_FPREGS(%pc),&0xff
  1012. fmovm.l DEF_FPCREGS(%pc),%fpcr,%fpsr,%fpiar
  1013. mov.w &0x0000,ICCR(%a6)
  1014. movm.l &0x7fff,IREGS(%a6)
  1015. fmovm.x &0xff,IFPREGS(%a6)
  1016. fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
  1017. mov.l &0xc1230001,DATA+0x0(%a6)
  1018. mov.l &0x23456789,DATA+0x4(%a6)
  1019. mov.l &0x12345678,DATA+0x8(%a6)
  1020. mov.w &0x0000,%cc
  1021. unsupp_2_pc:
  1022. fabs.p DATA(%a6),%fp0
  1023. mov.w %cc,SCCR(%a6)
  1024. movm.l &0x7fff,SREGS(%a6)
  1025. fmovm.x &0xff,SFPREGS(%a6)
  1026. fmovm.l %fpcr,%fpsr,%fpiar,SFPCREGS(%a6)
  1027. mov.l &0x3e660000,IFPREGS+0x0(%a6)
  1028. mov.l &0xd0ed23e8,IFPREGS+0x4(%a6)
  1029. mov.l &0xd14035bc,IFPREGS+0x8(%a6)
  1030. mov.l &0x00000108,IFPCREGS+0x4(%a6)
  1031. lea unsupp_2_pc(%pc),%a0
  1032. mov.l %a0,IFPCREGS+0x8(%a6)
  1033. bsr.l chkregs
  1034. tst.b %d0
  1035. bne.l error
  1036. bsr.l chkfpregs
  1037. tst.b %d0
  1038. bne.l error
  1039. clr.l %d0
  1040. rts
  1041. ###########################################################
  1042. ###########################################################
  1043. chkregs:
  1044. lea IREGS(%a6),%a0
  1045. lea SREGS(%a6),%a1
  1046. mov.l &14,%d0
  1047. chkregs_loop:
  1048. cmp.l (%a0)+,(%a1)+
  1049. bne.l chkregs_error
  1050. dbra.w %d0,chkregs_loop
  1051. mov.w ICCR(%a6),%d0
  1052. mov.w SCCR(%a6),%d1
  1053. cmp.w %d0,%d1
  1054. bne.l chkregs_error
  1055. clr.l %d0
  1056. rts
  1057. chkregs_error:
  1058. movq.l &0x1,%d0
  1059. rts
  1060. error:
  1061. mov.l TESTCTR(%a6),%d1
  1062. movq.l &0x1,%d0
  1063. rts
  1064. chkfpregs:
  1065. lea IFPREGS(%a6),%a0
  1066. lea SFPREGS(%a6),%a1
  1067. mov.l &23,%d0
  1068. chkfpregs_loop:
  1069. cmp.l (%a0)+,(%a1)+
  1070. bne.l chkfpregs_error
  1071. dbra.w %d0,chkfpregs_loop
  1072. lea IFPCREGS(%a6),%a0
  1073. lea SFPCREGS(%a6),%a1
  1074. cmp.l (%a0)+,(%a1)+
  1075. bne.l chkfpregs_error
  1076. cmp.l (%a0)+,(%a1)+
  1077. bne.l chkfpregs_error
  1078. cmp.l (%a0)+,(%a1)+
  1079. bne.l chkfpregs_error
  1080. clr.l %d0
  1081. rts
  1082. chkfpregs_error:
  1083. movq.l &0x1,%d0
  1084. rts
  1085. DEF_REGS:
  1086. long 0xacacacac, 0xacacacac, 0xacacacac, 0xacacacac
  1087. long 0xacacacac, 0xacacacac, 0xacacacac, 0xacacacac
  1088. long 0xacacacac, 0xacacacac, 0xacacacac, 0xacacacac
  1089. long 0xacacacac, 0xacacacac, 0xacacacac, 0xacacacac
  1090. DEF_FPREGS:
  1091. long 0x7fff0000, 0xffffffff, 0xffffffff
  1092. long 0x7fff0000, 0xffffffff, 0xffffffff
  1093. long 0x7fff0000, 0xffffffff, 0xffffffff
  1094. long 0x7fff0000, 0xffffffff, 0xffffffff
  1095. long 0x7fff0000, 0xffffffff, 0xffffffff
  1096. long 0x7fff0000, 0xffffffff, 0xffffffff
  1097. long 0x7fff0000, 0xffffffff, 0xffffffff
  1098. long 0x7fff0000, 0xffffffff, 0xffffffff
  1099. DEF_FPCREGS:
  1100. long 0x00000000, 0x00000000, 0x00000000
  1101. ############################################################
  1102. _print_str:
  1103. mov.l %d0,-(%sp)
  1104. mov.l (TESTTOP-0x80+0x0,%pc),%d0
  1105. pea (TESTTOP-0x80,%pc,%d0)
  1106. mov.l 0x4(%sp),%d0
  1107. rtd &0x4
  1108. _print_num:
  1109. mov.l %d0,-(%sp)
  1110. mov.l (TESTTOP-0x80+0x4,%pc),%d0
  1111. pea (TESTTOP-0x80,%pc,%d0)
  1112. mov.l 0x4(%sp),%d0
  1113. rtd &0x4
  1114. ############################################################