laag-nasm 2.13.03.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +57 -0
  3. data/LICENSE.txt +29 -0
  4. data/README.org +34 -0
  5. data/ext/laag/nasm/extconf.rb +16 -0
  6. data/laag-nasm.gemspec +20 -0
  7. data/lib/laag/nasm.rb +29 -0
  8. data/patches/Makefile.in.patch +13 -0
  9. data/vendor/repo.or.cz/nasm/.gitignore +102 -0
  10. data/vendor/repo.or.cz/nasm/AUTHORS +137 -0
  11. data/vendor/repo.or.cz/nasm/CHANGES +2 -0
  12. data/vendor/repo.or.cz/nasm/ChangeLog +2905 -0
  13. data/vendor/repo.or.cz/nasm/INSTALL +102 -0
  14. data/vendor/repo.or.cz/nasm/LICENSE +29 -0
  15. data/vendor/repo.or.cz/nasm/Makefile.in +855 -0
  16. data/vendor/repo.or.cz/nasm/Mkfiles/README +46 -0
  17. data/vendor/repo.or.cz/nasm/Mkfiles/msvc.mak +732 -0
  18. data/vendor/repo.or.cz/nasm/Mkfiles/openwcom.mak +706 -0
  19. data/vendor/repo.or.cz/nasm/README +23 -0
  20. data/vendor/repo.or.cz/nasm/SubmittingPatches +116 -0
  21. data/vendor/repo.or.cz/nasm/TODO +376 -0
  22. data/vendor/repo.or.cz/nasm/aclocal.m4 +139 -0
  23. data/vendor/repo.or.cz/nasm/asm/assemble.c +2957 -0
  24. data/vendor/repo.or.cz/nasm/asm/assemble.h +54 -0
  25. data/vendor/repo.or.cz/nasm/asm/directiv.c +566 -0
  26. data/vendor/repo.or.cz/nasm/asm/directiv.dat +92 -0
  27. data/vendor/repo.or.cz/nasm/asm/error.c +202 -0
  28. data/vendor/repo.or.cz/nasm/asm/eval.c +1014 -0
  29. data/vendor/repo.or.cz/nasm/asm/eval.h +49 -0
  30. data/vendor/repo.or.cz/nasm/asm/exprdump.c +79 -0
  31. data/vendor/repo.or.cz/nasm/asm/exprlib.c +200 -0
  32. data/vendor/repo.or.cz/nasm/asm/float.c +952 -0
  33. data/vendor/repo.or.cz/nasm/asm/float.h +54 -0
  34. data/vendor/repo.or.cz/nasm/asm/labels.c +540 -0
  35. data/vendor/repo.or.cz/nasm/asm/listing.c +346 -0
  36. data/vendor/repo.or.cz/nasm/asm/listing.h +113 -0
  37. data/vendor/repo.or.cz/nasm/asm/nasm.c +1855 -0
  38. data/vendor/repo.or.cz/nasm/asm/parser.c +1167 -0
  39. data/vendor/repo.or.cz/nasm/asm/parser.h +45 -0
  40. data/vendor/repo.or.cz/nasm/asm/phash.pl +109 -0
  41. data/vendor/repo.or.cz/nasm/asm/pptok.dat +96 -0
  42. data/vendor/repo.or.cz/nasm/asm/pptok.pl +271 -0
  43. data/vendor/repo.or.cz/nasm/asm/pragma.c +218 -0
  44. data/vendor/repo.or.cz/nasm/asm/preproc-nop.c +188 -0
  45. data/vendor/repo.or.cz/nasm/asm/preproc.c +5459 -0
  46. data/vendor/repo.or.cz/nasm/asm/preproc.h +55 -0
  47. data/vendor/repo.or.cz/nasm/asm/quote.c +479 -0
  48. data/vendor/repo.or.cz/nasm/asm/quote.h +44 -0
  49. data/vendor/repo.or.cz/nasm/asm/rdstrnum.c +68 -0
  50. data/vendor/repo.or.cz/nasm/asm/segalloc.c +51 -0
  51. data/vendor/repo.or.cz/nasm/asm/stdscan.c +345 -0
  52. data/vendor/repo.or.cz/nasm/asm/stdscan.h +49 -0
  53. data/vendor/repo.or.cz/nasm/asm/strfunc.c +359 -0
  54. data/vendor/repo.or.cz/nasm/asm/tokens.dat +135 -0
  55. data/vendor/repo.or.cz/nasm/asm/tokhash.pl +284 -0
  56. data/vendor/repo.or.cz/nasm/autogen.sh +9 -0
  57. data/vendor/repo.or.cz/nasm/common/common.c +122 -0
  58. data/vendor/repo.or.cz/nasm/config/msvc.h +192 -0
  59. data/vendor/repo.or.cz/nasm/config/unknown.h +51 -0
  60. data/vendor/repo.or.cz/nasm/config/watcom.h +74 -0
  61. data/vendor/repo.or.cz/nasm/configure.ac +253 -0
  62. data/vendor/repo.or.cz/nasm/contrib/MSVC6.txt +25 -0
  63. data/vendor/repo.or.cz/nasm/contrib/VSrules/nasm.README +16 -0
  64. data/vendor/repo.or.cz/nasm/contrib/VSrules/nasm.rules +79 -0
  65. data/vendor/repo.or.cz/nasm/disasm/disasm.c +1735 -0
  66. data/vendor/repo.or.cz/nasm/disasm/disasm.h +49 -0
  67. data/vendor/repo.or.cz/nasm/disasm/ndisasm.c +397 -0
  68. data/vendor/repo.or.cz/nasm/disasm/sync.c +132 -0
  69. data/vendor/repo.or.cz/nasm/disasm/sync.h +45 -0
  70. data/vendor/repo.or.cz/nasm/doc/Makefile.in +86 -0
  71. data/vendor/repo.or.cz/nasm/doc/README +20 -0
  72. data/vendor/repo.or.cz/nasm/doc/afmmetrics.ph +102 -0
  73. data/vendor/repo.or.cz/nasm/doc/changes.src +2588 -0
  74. data/vendor/repo.or.cz/nasm/doc/findfont.ph +180 -0
  75. data/vendor/repo.or.cz/nasm/doc/genps.pl +1294 -0
  76. data/vendor/repo.or.cz/nasm/doc/inslist.pl +108 -0
  77. data/vendor/repo.or.cz/nasm/doc/internal.doc +290 -0
  78. data/vendor/repo.or.cz/nasm/doc/local.css +1 -0
  79. data/vendor/repo.or.cz/nasm/doc/nasmdoc.css +150 -0
  80. data/vendor/repo.or.cz/nasm/doc/nasmdoc.src +8309 -0
  81. data/vendor/repo.or.cz/nasm/doc/nasmlogo.eps +212 -0
  82. data/vendor/repo.or.cz/nasm/doc/nasmlogw.png +0 -0
  83. data/vendor/repo.or.cz/nasm/doc/psfonts.ph +53 -0
  84. data/vendor/repo.or.cz/nasm/doc/pspdf.pl +98 -0
  85. data/vendor/repo.or.cz/nasm/doc/pswidth.ph +25 -0
  86. data/vendor/repo.or.cz/nasm/doc/rdsrc.pl +1111 -0
  87. data/vendor/repo.or.cz/nasm/doc/ttfmetrics.ph +63 -0
  88. data/vendor/repo.or.cz/nasm/headers/c +33 -0
  89. data/vendor/repo.or.cz/nasm/headers/doc +33 -0
  90. data/vendor/repo.or.cz/nasm/headers/mac +33 -0
  91. data/vendor/repo.or.cz/nasm/headers/perl +33 -0
  92. data/vendor/repo.or.cz/nasm/include/compiler.h +277 -0
  93. data/vendor/repo.or.cz/nasm/include/disp8.h +45 -0
  94. data/vendor/repo.or.cz/nasm/include/error.h +135 -0
  95. data/vendor/repo.or.cz/nasm/include/hashtbl.h +85 -0
  96. data/vendor/repo.or.cz/nasm/include/iflag.h +173 -0
  97. data/vendor/repo.or.cz/nasm/include/insns.h +76 -0
  98. data/vendor/repo.or.cz/nasm/include/labels.h +60 -0
  99. data/vendor/repo.or.cz/nasm/include/md5.h +21 -0
  100. data/vendor/repo.or.cz/nasm/include/nasm.h +1246 -0
  101. data/vendor/repo.or.cz/nasm/include/nasmint.h +219 -0
  102. data/vendor/repo.or.cz/nasm/include/nasmlib.h +524 -0
  103. data/vendor/repo.or.cz/nasm/include/opflags.h +271 -0
  104. data/vendor/repo.or.cz/nasm/include/perfhash.h +52 -0
  105. data/vendor/repo.or.cz/nasm/include/raa.h +46 -0
  106. data/vendor/repo.or.cz/nasm/include/rbtree.h +51 -0
  107. data/vendor/repo.or.cz/nasm/include/rdoff.h +169 -0
  108. data/vendor/repo.or.cz/nasm/include/saa.h +94 -0
  109. data/vendor/repo.or.cz/nasm/include/strlist.h +55 -0
  110. data/vendor/repo.or.cz/nasm/include/tables.h +70 -0
  111. data/vendor/repo.or.cz/nasm/include/ver.h +47 -0
  112. data/vendor/repo.or.cz/nasm/install-sh +250 -0
  113. data/vendor/repo.or.cz/nasm/macros/altreg.mac +107 -0
  114. data/vendor/repo.or.cz/nasm/macros/fp.mac +54 -0
  115. data/vendor/repo.or.cz/nasm/macros/ifunc.mac +48 -0
  116. data/vendor/repo.or.cz/nasm/macros/macros.pl +294 -0
  117. data/vendor/repo.or.cz/nasm/macros/smartalign.mac +189 -0
  118. data/vendor/repo.or.cz/nasm/macros/standard.mac +226 -0
  119. data/vendor/repo.or.cz/nasm/misc/Doxyfile +752 -0
  120. data/vendor/repo.or.cz/nasm/misc/Nindent +18 -0
  121. data/vendor/repo.or.cz/nasm/misc/README +2 -0
  122. data/vendor/repo.or.cz/nasm/misc/c16.mac +82 -0
  123. data/vendor/repo.or.cz/nasm/misc/c32.mac +52 -0
  124. data/vendor/repo.or.cz/nasm/misc/crcgen.c +44 -0
  125. data/vendor/repo.or.cz/nasm/misc/exebin.mac +57 -0
  126. data/vendor/repo.or.cz/nasm/misc/exebin2.mac +114 -0
  127. data/vendor/repo.or.cz/nasm/misc/fmtinsns.pl +40 -0
  128. data/vendor/repo.or.cz/nasm/misc/genfma.pl +63 -0
  129. data/vendor/repo.or.cz/nasm/misc/hints.txt +26 -0
  130. data/vendor/repo.or.cz/nasm/misc/magic +6 -0
  131. data/vendor/repo.or.cz/nasm/misc/myC32.mac +121 -0
  132. data/vendor/repo.or.cz/nasm/misc/nasm.sl +320 -0
  133. data/vendor/repo.or.cz/nasm/misc/nasmstab +296 -0
  134. data/vendor/repo.or.cz/nasm/misc/omfdump.c +517 -0
  135. data/vendor/repo.or.cz/nasm/misc/pmw.bat +9 -0
  136. data/vendor/repo.or.cz/nasm/misc/proc32.ash +441 -0
  137. data/vendor/repo.or.cz/nasm/misc/scitech.mac +1223 -0
  138. data/vendor/repo.or.cz/nasm/misc/xcrcgen.c +80 -0
  139. data/vendor/repo.or.cz/nasm/nasm.spec.in +83 -0
  140. data/vendor/repo.or.cz/nasm/nasm.spec.sed +3 -0
  141. data/vendor/repo.or.cz/nasm/nasm.txt +306 -0
  142. data/vendor/repo.or.cz/nasm/nasmlib/badenum.c +43 -0
  143. data/vendor/repo.or.cz/nasm/nasmlib/bsi.c +77 -0
  144. data/vendor/repo.or.cz/nasm/nasmlib/crc64.c +189 -0
  145. data/vendor/repo.or.cz/nasm/nasmlib/file.c +259 -0
  146. data/vendor/repo.or.cz/nasm/nasmlib/file.h +128 -0
  147. data/vendor/repo.or.cz/nasm/nasmlib/filename.c +69 -0
  148. data/vendor/repo.or.cz/nasm/nasmlib/hashtbl.c +232 -0
  149. data/vendor/repo.or.cz/nasm/nasmlib/ilog2.c +168 -0
  150. data/vendor/repo.or.cz/nasm/nasmlib/malloc.c +108 -0
  151. data/vendor/repo.or.cz/nasm/nasmlib/md5c.c +247 -0
  152. data/vendor/repo.or.cz/nasm/nasmlib/mmap.c +139 -0
  153. data/vendor/repo.or.cz/nasm/nasmlib/path.c +186 -0
  154. data/vendor/repo.or.cz/nasm/nasmlib/perfhash.c +55 -0
  155. data/vendor/repo.or.cz/nasm/nasmlib/perfhash.pl +362 -0
  156. data/vendor/repo.or.cz/nasm/nasmlib/raa.c +173 -0
  157. data/vendor/repo.or.cz/nasm/nasmlib/rbtree.c +119 -0
  158. data/vendor/repo.or.cz/nasm/nasmlib/readnum.c +172 -0
  159. data/vendor/repo.or.cz/nasm/nasmlib/realpath.c +135 -0
  160. data/vendor/repo.or.cz/nasm/nasmlib/saa.c +431 -0
  161. data/vendor/repo.or.cz/nasm/nasmlib/srcfile.c +128 -0
  162. data/vendor/repo.or.cz/nasm/nasmlib/string.c +242 -0
  163. data/vendor/repo.or.cz/nasm/nasmlib/strlist.c +100 -0
  164. data/vendor/repo.or.cz/nasm/nasmlib/ver.c +51 -0
  165. data/vendor/repo.or.cz/nasm/nasmlib/zerobuf.c +42 -0
  166. data/vendor/repo.or.cz/nasm/ndisasm.txt +94 -0
  167. data/vendor/repo.or.cz/nasm/nsis/NASMMultiUser.nsh +478 -0
  168. data/vendor/repo.or.cz/nasm/nsis/getpearch.pl +76 -0
  169. data/vendor/repo.or.cz/nasm/nsis/nasm-un.ico +0 -0
  170. data/vendor/repo.or.cz/nasm/nsis/nasm.ico +0 -0
  171. data/vendor/repo.or.cz/nasm/nsis/nasm.nsi +241 -0
  172. data/vendor/repo.or.cz/nasm/output/codeview.c +814 -0
  173. data/vendor/repo.or.cz/nasm/output/dwarf.h +566 -0
  174. data/vendor/repo.or.cz/nasm/output/elf.h +537 -0
  175. data/vendor/repo.or.cz/nasm/output/legacy.c +112 -0
  176. data/vendor/repo.or.cz/nasm/output/nulldbg.c +93 -0
  177. data/vendor/repo.or.cz/nasm/output/nullout.c +51 -0
  178. data/vendor/repo.or.cz/nasm/output/outaout.c +954 -0
  179. data/vendor/repo.or.cz/nasm/output/outaout.mac +37 -0
  180. data/vendor/repo.or.cz/nasm/output/outas86.c +650 -0
  181. data/vendor/repo.or.cz/nasm/output/outas86.mac +37 -0
  182. data/vendor/repo.or.cz/nasm/output/outbin.c +1713 -0
  183. data/vendor/repo.or.cz/nasm/output/outbin.mac +40 -0
  184. data/vendor/repo.or.cz/nasm/output/outcoff.c +1242 -0
  185. data/vendor/repo.or.cz/nasm/output/outcoff.mac +43 -0
  186. data/vendor/repo.or.cz/nasm/output/outdbg.c +425 -0
  187. data/vendor/repo.or.cz/nasm/output/outelf.c +3370 -0
  188. data/vendor/repo.or.cz/nasm/output/outelf.h +156 -0
  189. data/vendor/repo.or.cz/nasm/output/outelf.mac +41 -0
  190. data/vendor/repo.or.cz/nasm/output/outform.c +120 -0
  191. data/vendor/repo.or.cz/nasm/output/outform.h +379 -0
  192. data/vendor/repo.or.cz/nasm/output/outieee.c +1528 -0
  193. data/vendor/repo.or.cz/nasm/output/outlib.c +58 -0
  194. data/vendor/repo.or.cz/nasm/output/outlib.h +63 -0
  195. data/vendor/repo.or.cz/nasm/output/outmacho.c +2387 -0
  196. data/vendor/repo.or.cz/nasm/output/outmacho.mac +49 -0
  197. data/vendor/repo.or.cz/nasm/output/outobj.c +2725 -0
  198. data/vendor/repo.or.cz/nasm/output/outobj.mac +49 -0
  199. data/vendor/repo.or.cz/nasm/output/outrdf.mac +40 -0
  200. data/vendor/repo.or.cz/nasm/output/outrdf2.c +791 -0
  201. data/vendor/repo.or.cz/nasm/output/outrdf2.mac +43 -0
  202. data/vendor/repo.or.cz/nasm/output/pecoff.h +532 -0
  203. data/vendor/repo.or.cz/nasm/output/stabs.h +144 -0
  204. data/vendor/repo.or.cz/nasm/perllib/crc64.ph +158 -0
  205. data/vendor/repo.or.cz/nasm/perllib/gensv.pl +34 -0
  206. data/vendor/repo.or.cz/nasm/perllib/phash.ph +200 -0
  207. data/vendor/repo.or.cz/nasm/perllib/random_sv_vectors.ph +67 -0
  208. data/vendor/repo.or.cz/nasm/rdoff/README +185 -0
  209. data/vendor/repo.or.cz/nasm/rdoff/collectn.c +44 -0
  210. data/vendor/repo.or.cz/nasm/rdoff/collectn.h +22 -0
  211. data/vendor/repo.or.cz/nasm/rdoff/doc/Makefile +37 -0
  212. data/vendor/repo.or.cz/nasm/rdoff/doc/rdoff.texi +137 -0
  213. data/vendor/repo.or.cz/nasm/rdoff/doc/v1-v2.txt +62 -0
  214. data/vendor/repo.or.cz/nasm/rdoff/hash.c +122 -0
  215. data/vendor/repo.or.cz/nasm/rdoff/hash.h +17 -0
  216. data/vendor/repo.or.cz/nasm/rdoff/ldrdf.1 +41 -0
  217. data/vendor/repo.or.cz/nasm/rdoff/ldrdf.c +1395 -0
  218. data/vendor/repo.or.cz/nasm/rdoff/ldsegs.h +59 -0
  219. data/vendor/repo.or.cz/nasm/rdoff/rdf2bin.1 +65 -0
  220. data/vendor/repo.or.cz/nasm/rdoff/rdf2bin.c +431 -0
  221. data/vendor/repo.or.cz/nasm/rdoff/rdf2com.1 +1 -0
  222. data/vendor/repo.or.cz/nasm/rdoff/rdf2ihx.1 +1 -0
  223. data/vendor/repo.or.cz/nasm/rdoff/rdf2ith.1 +1 -0
  224. data/vendor/repo.or.cz/nasm/rdoff/rdf2srec.1 +1 -0
  225. data/vendor/repo.or.cz/nasm/rdoff/rdfdump.1 +24 -0
  226. data/vendor/repo.or.cz/nasm/rdoff/rdfdump.c +347 -0
  227. data/vendor/repo.or.cz/nasm/rdoff/rdflib.1 +39 -0
  228. data/vendor/repo.or.cz/nasm/rdoff/rdflib.c +434 -0
  229. data/vendor/repo.or.cz/nasm/rdoff/rdfload.c +213 -0
  230. data/vendor/repo.or.cz/nasm/rdoff/rdfload.h +29 -0
  231. data/vendor/repo.or.cz/nasm/rdoff/rdfutils.h +165 -0
  232. data/vendor/repo.or.cz/nasm/rdoff/rdlar.c +492 -0
  233. data/vendor/repo.or.cz/nasm/rdoff/rdlar.h +34 -0
  234. data/vendor/repo.or.cz/nasm/rdoff/rdlib.c +290 -0
  235. data/vendor/repo.or.cz/nasm/rdoff/rdlib.h +62 -0
  236. data/vendor/repo.or.cz/nasm/rdoff/rdoff.c +621 -0
  237. data/vendor/repo.or.cz/nasm/rdoff/rdx.1 +21 -0
  238. data/vendor/repo.or.cz/nasm/rdoff/rdx.c +90 -0
  239. data/vendor/repo.or.cz/nasm/rdoff/segtab.c +172 -0
  240. data/vendor/repo.or.cz/nasm/rdoff/segtab.h +45 -0
  241. data/vendor/repo.or.cz/nasm/rdoff/symtab.c +159 -0
  242. data/vendor/repo.or.cz/nasm/rdoff/symtab.h +55 -0
  243. data/vendor/repo.or.cz/nasm/rdoff/test/Makefile +10 -0
  244. data/vendor/repo.or.cz/nasm/rdoff/test/makelib.sh +14 -0
  245. data/vendor/repo.or.cz/nasm/rdoff/test/rdfseg.asm +20 -0
  246. data/vendor/repo.or.cz/nasm/rdoff/test/rdfseg2.asm +12 -0
  247. data/vendor/repo.or.cz/nasm/rdoff/test/rdftest1.asm +54 -0
  248. data/vendor/repo.or.cz/nasm/rdoff/test/rdftest2.asm +33 -0
  249. data/vendor/repo.or.cz/nasm/rdoff/test/rdtlib.asm +48 -0
  250. data/vendor/repo.or.cz/nasm/rdoff/test/rdtmain.asm +47 -0
  251. data/vendor/repo.or.cz/nasm/rdoff/test/testlib.asm +18 -0
  252. data/vendor/repo.or.cz/nasm/stdlib/snprintf.c +29 -0
  253. data/vendor/repo.or.cz/nasm/stdlib/strlcpy.c +51 -0
  254. data/vendor/repo.or.cz/nasm/stdlib/strnlen.c +46 -0
  255. data/vendor/repo.or.cz/nasm/stdlib/vsnprintf.c +51 -0
  256. data/vendor/repo.or.cz/nasm/test/Makefile +106 -0
  257. data/vendor/repo.or.cz/nasm/test/_file_.asm +5 -0
  258. data/vendor/repo.or.cz/nasm/test/_version.asm +2 -0
  259. data/vendor/repo.or.cz/nasm/test/a32offs.asm +9 -0
  260. data/vendor/repo.or.cz/nasm/test/absolute.asm +40 -0
  261. data/vendor/repo.or.cz/nasm/test/addr64x.asm +18 -0
  262. data/vendor/repo.or.cz/nasm/test/align13.asm +19 -0
  263. data/vendor/repo.or.cz/nasm/test/align13s.asm +20 -0
  264. data/vendor/repo.or.cz/nasm/test/alonesym-obj.asm +166 -0
  265. data/vendor/repo.or.cz/nasm/test/andbyte.asm +15 -0
  266. data/vendor/repo.or.cz/nasm/test/aoutso.asm +99 -0
  267. data/vendor/repo.or.cz/nasm/test/aouttest.asm +86 -0
  268. data/vendor/repo.or.cz/nasm/test/aouttest.c +36 -0
  269. data/vendor/repo.or.cz/nasm/test/avx.asm +46 -0
  270. data/vendor/repo.or.cz/nasm/test/avx005.asm +529 -0
  271. data/vendor/repo.or.cz/nasm/test/avx2.asm +1608 -0
  272. data/vendor/repo.or.cz/nasm/test/avx512cd.asm +106 -0
  273. data/vendor/repo.or.cz/nasm/test/avx512er.asm +144 -0
  274. data/vendor/repo.or.cz/nasm/test/avx512f.asm +7000 -0
  275. data/vendor/repo.or.cz/nasm/test/avx512pf.asm +88 -0
  276. data/vendor/repo.or.cz/nasm/test/bcd.asm +23 -0
  277. data/vendor/repo.or.cz/nasm/test/binexe.asm +35 -0
  278. data/vendor/repo.or.cz/nasm/test/bintest.asm +59 -0
  279. data/vendor/repo.or.cz/nasm/test/bisect.sh +22 -0
  280. data/vendor/repo.or.cz/nasm/test/br1879590.asm +25 -0
  281. data/vendor/repo.or.cz/nasm/test/br2003451.asm +17 -0
  282. data/vendor/repo.or.cz/nasm/test/br2030823.asm +7 -0
  283. data/vendor/repo.or.cz/nasm/test/br2148476.asm +221 -0
  284. data/vendor/repo.or.cz/nasm/test/br2222615.asm +19 -0
  285. data/vendor/repo.or.cz/nasm/test/br2496848.asm +42 -0
  286. data/vendor/repo.or.cz/nasm/test/br3005117.asm +26 -0
  287. data/vendor/repo.or.cz/nasm/test/br3026808.asm +20 -0
  288. data/vendor/repo.or.cz/nasm/test/br3028880.asm +8 -0
  289. data/vendor/repo.or.cz/nasm/test/br3041451.asm +59 -0
  290. data/vendor/repo.or.cz/nasm/test/br3058845.asm +14 -0
  291. data/vendor/repo.or.cz/nasm/test/br3066383.asm +70 -0
  292. data/vendor/repo.or.cz/nasm/test/br3074517.asm +12 -0
  293. data/vendor/repo.or.cz/nasm/test/br3092924.asm +25 -0
  294. data/vendor/repo.or.cz/nasm/test/br3104312.asm +11 -0
  295. data/vendor/repo.or.cz/nasm/test/br3109604.asm +9 -0
  296. data/vendor/repo.or.cz/nasm/test/br3174983.asm +9 -0
  297. data/vendor/repo.or.cz/nasm/test/br3187743.asm +7 -0
  298. data/vendor/repo.or.cz/nasm/test/br3189064.asm +7 -0
  299. data/vendor/repo.or.cz/nasm/test/br3200749.asm +9 -0
  300. data/vendor/repo.or.cz/nasm/test/br3385573.asm +11 -0
  301. data/vendor/repo.or.cz/nasm/test/br3392252.asm +43 -0
  302. data/vendor/repo.or.cz/nasm/test/br3392259.asm +8 -0
  303. data/vendor/repo.or.cz/nasm/test/br3392363.asm +4 -0
  304. data/vendor/repo.or.cz/nasm/test/br3392392.asm +16 -0
  305. data/vendor/repo.or.cz/nasm/test/br3392396.asm +5 -0
  306. data/vendor/repo.or.cz/nasm/test/br3392411.asm +22 -0
  307. data/vendor/repo.or.cz/nasm/test/br3392418.asm +3 -0
  308. data/vendor/repo.or.cz/nasm/test/br3392439.asm +25 -0
  309. data/vendor/repo.or.cz/nasm/test/br3392442.asm +6 -0
  310. data/vendor/repo.or.cz/nasm/test/br560575.asm +17 -0
  311. data/vendor/repo.or.cz/nasm/test/br560873.asm +27 -0
  312. data/vendor/repo.or.cz/nasm/test/br890790.asm +7 -0
  313. data/vendor/repo.or.cz/nasm/test/br890790_i.asm +1 -0
  314. data/vendor/repo.or.cz/nasm/test/br978756.asm +7 -0
  315. data/vendor/repo.or.cz/nasm/test/changed.asm +383 -0
  316. data/vendor/repo.or.cz/nasm/test/cofftest.asm +85 -0
  317. data/vendor/repo.or.cz/nasm/test/cofftest.c +35 -0
  318. data/vendor/repo.or.cz/nasm/test/crc32.asm +37 -0
  319. data/vendor/repo.or.cz/nasm/test/cv8struc.asm +14 -0
  320. data/vendor/repo.or.cz/nasm/test/dtbcd.asm +72 -0
  321. data/vendor/repo.or.cz/nasm/test/elf64so.asm +118 -0
  322. data/vendor/repo.or.cz/nasm/test/elfso.asm +100 -0
  323. data/vendor/repo.or.cz/nasm/test/elftest.asm +87 -0
  324. data/vendor/repo.or.cz/nasm/test/elftest.c +38 -0
  325. data/vendor/repo.or.cz/nasm/test/elftest64.c +43 -0
  326. data/vendor/repo.or.cz/nasm/test/elif.asm +39 -0
  327. data/vendor/repo.or.cz/nasm/test/expimp.asm +90 -0
  328. data/vendor/repo.or.cz/nasm/test/far64.asm +10 -0
  329. data/vendor/repo.or.cz/nasm/test/float.asm +186 -0
  330. data/vendor/repo.or.cz/nasm/test/float8.asm +135 -0
  331. data/vendor/repo.or.cz/nasm/test/floatb.asm +35 -0
  332. data/vendor/repo.or.cz/nasm/test/floatexp.asm +382 -0
  333. data/vendor/repo.or.cz/nasm/test/floatize.asm +19 -0
  334. data/vendor/repo.or.cz/nasm/test/floattest.asm +28 -0
  335. data/vendor/repo.or.cz/nasm/test/floatx.asm +525 -0
  336. data/vendor/repo.or.cz/nasm/test/fpu.asm +127 -0
  337. data/vendor/repo.or.cz/nasm/test/fwdopt.asm +133 -0
  338. data/vendor/repo.or.cz/nasm/test/fwdoptpp.asm +150 -0
  339. data/vendor/repo.or.cz/nasm/test/gas2nasm.py +104 -0
  340. data/vendor/repo.or.cz/nasm/test/gather.asm +11 -0
  341. data/vendor/repo.or.cz/nasm/test/gotoff64.asm +25 -0
  342. data/vendor/repo.or.cz/nasm/test/hexfp.asm +25 -0
  343. data/vendor/repo.or.cz/nasm/test/hle.asm +19 -0
  344. data/vendor/repo.or.cz/nasm/test/ifelse.asm +46 -0
  345. data/vendor/repo.or.cz/nasm/test/ifenv.asm +31 -0
  346. data/vendor/repo.or.cz/nasm/test/ifmacro.asm +413 -0
  347. data/vendor/repo.or.cz/nasm/test/iftoken.asm +317 -0
  348. data/vendor/repo.or.cz/nasm/test/iftoken.pl +32 -0
  349. data/vendor/repo.or.cz/nasm/test/ilog2.asm +271 -0
  350. data/vendor/repo.or.cz/nasm/test/imacro.asm +8 -0
  351. data/vendor/repo.or.cz/nasm/test/imm.asm +23 -0
  352. data/vendor/repo.or.cz/nasm/test/imm64.asm +61 -0
  353. data/vendor/repo.or.cz/nasm/test/immwarn.asm +91 -0
  354. data/vendor/repo.or.cz/nasm/test/imul.asm +117 -0
  355. data/vendor/repo.or.cz/nasm/test/inc1.asm +6 -0
  356. data/vendor/repo.or.cz/nasm/test/inc2.asm +8 -0
  357. data/vendor/repo.or.cz/nasm/test/incbin.asm +7 -0
  358. data/vendor/repo.or.cz/nasm/test/incbin.data +2 -0
  359. data/vendor/repo.or.cz/nasm/test/inctest.asm +15 -0
  360. data/vendor/repo.or.cz/nasm/test/insnlbl.asm +12 -0
  361. data/vendor/repo.or.cz/nasm/test/invlpga.asm +11 -0
  362. data/vendor/repo.or.cz/nasm/test/jmp64.asm +19 -0
  363. data/vendor/repo.or.cz/nasm/test/lar_lsl.asm +124 -0
  364. data/vendor/repo.or.cz/nasm/test/larlsl.asm +23 -0
  365. data/vendor/repo.or.cz/nasm/test/lnxhello.asm +54 -0
  366. data/vendor/repo.or.cz/nasm/test/local.asm +19 -0
  367. data/vendor/repo.or.cz/nasm/test/loopoffs.asm +12 -0
  368. data/vendor/repo.or.cz/nasm/test/lwp.asm +213 -0
  369. data/vendor/repo.or.cz/nasm/test/macro-defaults.asm +64 -0
  370. data/vendor/repo.or.cz/nasm/test/macroerr.asm +12 -0
  371. data/vendor/repo.or.cz/nasm/test/macroerr.inc +3 -0
  372. data/vendor/repo.or.cz/nasm/test/mmxsize.asm +38 -0
  373. data/vendor/repo.or.cz/nasm/test/movd.asm +12 -0
  374. data/vendor/repo.or.cz/nasm/test/movd64.asm +15 -0
  375. data/vendor/repo.or.cz/nasm/test/movimm.asm +28 -0
  376. data/vendor/repo.or.cz/nasm/test/movnti.asm +10 -0
  377. data/vendor/repo.or.cz/nasm/test/mpx-64.asm +120 -0
  378. data/vendor/repo.or.cz/nasm/test/mpx.asm +89 -0
  379. data/vendor/repo.or.cz/nasm/test/multisection.asm +96 -0
  380. data/vendor/repo.or.cz/nasm/test/nasmformat.asm +17 -0
  381. data/vendor/repo.or.cz/nasm/test/new +9 -0
  382. data/vendor/repo.or.cz/nasm/test/newrdwr.asm +24 -0
  383. data/vendor/repo.or.cz/nasm/test/nop.asm +17 -0
  384. data/vendor/repo.or.cz/nasm/test/nullfile.asm +4 -0
  385. data/vendor/repo.or.cz/nasm/test/objexe.asm +30 -0
  386. data/vendor/repo.or.cz/nasm/test/objlink.c +33 -0
  387. data/vendor/repo.or.cz/nasm/test/objtest.asm +85 -0
  388. data/vendor/repo.or.cz/nasm/test/optimization.asm +104 -0
  389. data/vendor/repo.or.cz/nasm/test/org.asm +18 -0
  390. data/vendor/repo.or.cz/nasm/test/paste.asm +12 -0
  391. data/vendor/repo.or.cz/nasm/test/pcrel.asm +52 -0
  392. data/vendor/repo.or.cz/nasm/test/perf/label.pl +18 -0
  393. data/vendor/repo.or.cz/nasm/test/perf/macro.pl +18 -0
  394. data/vendor/repo.or.cz/nasm/test/perf/token.pl +23 -0
  395. data/vendor/repo.or.cz/nasm/test/performtest.pl +192 -0
  396. data/vendor/repo.or.cz/nasm/test/pextrw.asm +3 -0
  397. data/vendor/repo.or.cz/nasm/test/pinsr16.asm +53 -0
  398. data/vendor/repo.or.cz/nasm/test/pinsr32.asm +53 -0
  399. data/vendor/repo.or.cz/nasm/test/pinsr64.asm +68 -0
  400. data/vendor/repo.or.cz/nasm/test/popcnt.asm +32 -0
  401. data/vendor/repo.or.cz/nasm/test/ppindirect.asm +42 -0
  402. data/vendor/repo.or.cz/nasm/test/pragma.asm +12 -0
  403. data/vendor/repo.or.cz/nasm/test/prefix66.asm +28 -0
  404. data/vendor/repo.or.cz/nasm/test/ptr.asm +4 -0
  405. data/vendor/repo.or.cz/nasm/test/pushseg.asm +17 -0
  406. data/vendor/repo.or.cz/nasm/test/r13.asm +15 -0
  407. data/vendor/repo.or.cz/nasm/test/radix.asm +54 -0
  408. data/vendor/repo.or.cz/nasm/test/rdpid.asm +21 -0
  409. data/vendor/repo.or.cz/nasm/test/reldef.asm +57 -0
  410. data/vendor/repo.or.cz/nasm/test/relocs.asm +20 -0
  411. data/vendor/repo.or.cz/nasm/test/riprel.asm +5357 -0
  412. data/vendor/repo.or.cz/nasm/test/riprel.pl +29 -0
  413. data/vendor/repo.or.cz/nasm/test/riprel2.asm +11 -0
  414. data/vendor/repo.or.cz/nasm/test/sha-64.asm +30 -0
  415. data/vendor/repo.or.cz/nasm/test/sha.asm +31 -0
  416. data/vendor/repo.or.cz/nasm/test/smartalign16.asm +36 -0
  417. data/vendor/repo.or.cz/nasm/test/smartalign32.asm +36 -0
  418. data/vendor/repo.or.cz/nasm/test/smartalign64.asm +36 -0
  419. data/vendor/repo.or.cz/nasm/test/splitea.asm +11 -0
  420. data/vendor/repo.or.cz/nasm/test/sreg.asm +65 -0
  421. data/vendor/repo.or.cz/nasm/test/strlen.asm +5 -0
  422. data/vendor/repo.or.cz/nasm/test/struc.asm +33 -0
  423. data/vendor/repo.or.cz/nasm/test/test67.asm +38 -0
  424. data/vendor/repo.or.cz/nasm/test/testdos.asm +13 -0
  425. data/vendor/repo.or.cz/nasm/test/testnos3.asm +973 -0
  426. data/vendor/repo.or.cz/nasm/test/time.asm +11 -0
  427. data/vendor/repo.or.cz/nasm/test/times.asm +21 -0
  428. data/vendor/repo.or.cz/nasm/test/timesneg.asm +3 -0
  429. data/vendor/repo.or.cz/nasm/test/tmap.nas +1447 -0
  430. data/vendor/repo.or.cz/nasm/test/uscore.asm +15 -0
  431. data/vendor/repo.or.cz/nasm/test/utf.asm +82 -0
  432. data/vendor/repo.or.cz/nasm/test/vaesenc.asm +22 -0
  433. data/vendor/repo.or.cz/nasm/test/vex.asm +9 -0
  434. data/vendor/repo.or.cz/nasm/test/vgather.asm +76 -0
  435. data/vendor/repo.or.cz/nasm/test/vmread.asm +26 -0
  436. data/vendor/repo.or.cz/nasm/test/weirdpaste.asm +29 -0
  437. data/vendor/repo.or.cz/nasm/test/xchg.asm +96 -0
  438. data/vendor/repo.or.cz/nasm/test/xcrypt.asm +24 -0
  439. data/vendor/repo.or.cz/nasm/test/xmm0.asm +12 -0
  440. data/vendor/repo.or.cz/nasm/test/zerobyte.asm +22 -0
  441. data/vendor/repo.or.cz/nasm/tools/cleanfile +176 -0
  442. data/vendor/repo.or.cz/nasm/tools/cleanpatch +258 -0
  443. data/vendor/repo.or.cz/nasm/tools/mkdep.pl +261 -0
  444. data/vendor/repo.or.cz/nasm/tools/release +105 -0
  445. data/vendor/repo.or.cz/nasm/tools/syncfiles.pl +137 -0
  446. data/vendor/repo.or.cz/nasm/tools/tag-release +58 -0
  447. data/vendor/repo.or.cz/nasm/version +1 -0
  448. data/vendor/repo.or.cz/nasm/version.pl +189 -0
  449. data/vendor/repo.or.cz/nasm/x86/disp8.c +131 -0
  450. data/vendor/repo.or.cz/nasm/x86/insns-iflags.ph +280 -0
  451. data/vendor/repo.or.cz/nasm/x86/insns.dat +5371 -0
  452. data/vendor/repo.or.cz/nasm/x86/insns.pl +1043 -0
  453. data/vendor/repo.or.cz/nasm/x86/regs.dat +138 -0
  454. data/vendor/repo.or.cz/nasm/x86/regs.pl +204 -0
  455. metadata +520 -0
@@ -0,0 +1,11 @@
1
+ ;Not automatically testable because it is not constant
2
+ db __DATE__, 13, 10
3
+ db __TIME__, 13, 10
4
+ db __UTC_DATE__, 13, 10
5
+ db __UTC_TIME__, 13, 10
6
+ align 4
7
+ dd __DATE_NUM__
8
+ dd __TIME_NUM__
9
+ dd __UTC_DATE_NUM__
10
+ dd __UTC_TIME_NUM__
11
+ dd __POSIX_TIME__
@@ -0,0 +1,21 @@
1
+ bits 64
2
+
3
+ ; Broken per BR 3392278
4
+ times 4 paddd xmm8, xmm11
5
+
6
+ ; Broken per BR 3392279
7
+ bswap r12d
8
+ times 4 bswap r12d
9
+
10
+ ; Forward jump
11
+ times 128 jmp there
12
+
13
+ there:
14
+ nop
15
+
16
+ ; Backwards jump
17
+ times 128 jmp there
18
+
19
+ section .bss
20
+ times 0x10 resb 0x20
21
+ resb 1
@@ -0,0 +1,3 @@
1
+ bits 32
2
+ times -1 db 0
3
+ times -1 incbin "timesneg.asm"
@@ -0,0 +1,1447 @@
1
+ ;; NASM note: this file abuses the section flags in such a way that
2
+ ;; NASM 0.98.37 broke when this was compiled with:
3
+ ;; nasm -o tmap.o -f elf -DLINUX tmap.nas
4
+
5
+ ;;-----------------------------------------------------------------------------
6
+ ;;
7
+ ;; $Id$
8
+ ;;
9
+ ;; Copyright (C) 1998-2000 by DooM Legacy Team.
10
+ ;;
11
+ ;; This program is free software; you can redistribute it and/or
12
+ ;; modify it under the terms of the GNU General Public License
13
+ ;; as published by the Free Software Foundation; either version 2
14
+ ;; of the License, or (at your option) any later version.
15
+ ;;
16
+ ;; This program is distributed in the hope that it will be useful,
17
+ ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18
+ ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
+ ;; GNU General Public License for more details.
20
+ ;;
21
+ ;;
22
+ ;; $Log$
23
+ ;; Revision 1.2 2003/09/10 23:33:38 hpa
24
+ ;; Use the version of tmap.nas that actually caused problems
25
+ ;;
26
+ ;; Revision 1.10 2001/02/24 13:35:21 bpereira
27
+ ;; no message
28
+ ;;
29
+ ;; Revision 1.9 2001/02/10 15:24:19 hurdler
30
+ ;; Apply Rob's patch for Linux version
31
+ ;;
32
+ ;; Revision 1.8 2000/11/12 09:48:15 bpereira
33
+ ;; no message
34
+ ;;
35
+ ;; Revision 1.7 2000/11/06 20:52:16 bpereira
36
+ ;; no message
37
+ ;;
38
+ ;; Revision 1.6 2000/11/03 11:48:40 hurdler
39
+ ;; Fix compiling problem under win32 with 3D-Floors and FragglScript (to verify!)
40
+ ;;
41
+ ;; Revision 1.5 2000/11/03 03:27:17 stroggonmeth
42
+ ;; Again with the bug fixing...
43
+ ;;
44
+ ;; Revision 1.4 2000/11/02 17:50:10 stroggonmeth
45
+ ;; Big 3Dfloors & FraggleScript commit!!
46
+ ;;
47
+ ;; Revision 1.3 2000/04/24 20:24:38 bpereira
48
+ ;; no message
49
+ ;;
50
+ ;; Revision 1.2 2000/02/27 00:42:11 hurdler
51
+ ;; fix CR+LF problem
52
+ ;;
53
+ ;; Revision 1.1.1.1 2000/02/22 20:32:32 hurdler
54
+ ;; Initial import into CVS (v1.29 pr3)
55
+ ;;
56
+ ;;
57
+ ;; DESCRIPTION:
58
+ ;; assembler optimised rendering code for software mode
59
+ ;; draw floor spans, and wall columns.
60
+ ;;
61
+ ;;-----------------------------------------------------------------------------
62
+
63
+
64
+ [BITS 32]
65
+
66
+ %ifdef LINUX
67
+ %macro cextern 1
68
+ [extern %1]
69
+ %endmacro
70
+
71
+ %macro cglobal 1
72
+ [global %1]
73
+ %endmacro
74
+
75
+ %define CODE_SEG .data
76
+ %else
77
+ %macro cextern 1
78
+ %define %1 _%1
79
+ [extern %1]
80
+ %endmacro
81
+
82
+ %macro cglobal 1
83
+ %define %1 _%1
84
+ [global %1]
85
+ %endmacro
86
+
87
+ %define CODE_SEG .text
88
+ %endif
89
+
90
+
91
+ ;; externs
92
+ ;; columns
93
+ cextern dc_x
94
+ cextern dc_yl
95
+ cextern dc_yh
96
+ cextern ylookup
97
+ cextern columnofs
98
+ cextern dc_source
99
+ cextern dc_texturemid
100
+ cextern dc_iscale
101
+ cextern centery
102
+ cextern dc_colormap
103
+ cextern dc_transmap
104
+ cextern colormaps
105
+
106
+ ;; spans
107
+ cextern ds_x1
108
+ cextern ds_x2
109
+ cextern ds_y
110
+ cextern ds_xfrac
111
+ cextern ds_yfrac
112
+ cextern ds_xstep
113
+ cextern ds_ystep
114
+ cextern ds_source
115
+ cextern ds_colormap
116
+ ;cextern ds_textureheight
117
+
118
+ ; polygon edge rasterizer
119
+ cextern prastertab
120
+
121
+
122
+ ;;----------------------------------------------------------------------
123
+ ;;
124
+ ;; R_DrawColumn
125
+ ;;
126
+ ;; New optimised version 10-01-1998 by D.Fabrice and P.Boris
127
+ ;; TO DO: optimise it much farther... should take at most 3 cycles/pix
128
+ ;; once it's fixed, add code to patch the offsets so that it
129
+ ;; works in every screen width.
130
+ ;;
131
+ ;;----------------------------------------------------------------------
132
+
133
+ [SECTION .data]
134
+
135
+ ;;.align 4
136
+ loopcount dd 0
137
+ pixelcount dd 0
138
+ tystep dd 0
139
+
140
+ [SECTION CODE_SEG write]
141
+
142
+ ;----------------------------------------------------------------------------
143
+ ;fixed_t FixedMul (fixed_t a, fixed_t b)
144
+ ;----------------------------------------------------------------------------
145
+ cglobal FixedMul
146
+ ; align 16
147
+ FixedMul:
148
+ mov eax,[esp+4]
149
+ imul dword [esp+8]
150
+ shrd eax,edx,16
151
+ ret
152
+
153
+ ;----------------------------------------------------------------------------
154
+ ;fixed_t FixedDiv2 (fixed_t a, fixed_t b);
155
+ ;----------------------------------------------------------------------------
156
+ cglobal FixedDiv2
157
+ ; align 16
158
+ FixedDiv2:
159
+ mov eax,[esp+4]
160
+ mov edx,eax ;; these two instructions allow the next
161
+ sar edx,31 ;; two to pair, on the Pentium processor.
162
+ shld edx,eax,16
163
+ sal eax,16
164
+ idiv dword [esp+8]
165
+ ret
166
+
167
+ ;----------------------------------------------------------------------------
168
+ ; void ASM_PatchRowBytes (int rowbytes);
169
+ ;----------------------------------------------------------------------------
170
+ cglobal ASM_PatchRowBytes
171
+ ; align 16
172
+ ASM_PatchRowBytes:
173
+ mov eax,[esp+4]
174
+ mov [p1+2],eax
175
+ mov [p2+2],eax
176
+ mov [p3+2],eax
177
+ mov [p4+2],eax
178
+ mov [p5+2],eax
179
+ mov [p6+2],eax
180
+ mov [p7+2],eax
181
+ mov [p8+2],eax
182
+ mov [p9+2],eax
183
+ mov [pa+2],eax
184
+ mov [pb+2],eax
185
+ mov [pc+2],eax
186
+ mov [pd+2],eax
187
+ mov [pe+2],eax
188
+ mov [pf+2],eax
189
+ mov [pg+2],eax
190
+ mov [ph+2],eax
191
+ mov [pi+2],eax
192
+ mov [pj+2],eax
193
+ mov [pk+2],eax
194
+ mov [pl+2],eax
195
+ mov [pm+2],eax
196
+ mov [pn+2],eax
197
+ mov [po+2],eax
198
+ mov [pp+2],eax
199
+ mov [pq+2],eax
200
+ add eax,eax
201
+ mov [q1+2],eax
202
+ mov [q2+2],eax
203
+ mov [q3+2],eax
204
+ mov [q4+2],eax
205
+ mov [q5+2],eax
206
+ mov [q6+2],eax
207
+ mov [q7+2],eax
208
+ mov [q8+2],eax
209
+ ret
210
+
211
+
212
+ ;----------------------------------------------------------------------------
213
+ ; 8bpp column drawer
214
+ ;----------------------------------------------------------------------------
215
+
216
+ cglobal R_DrawColumn_8
217
+ ; align 16
218
+ R_DrawColumn_8:
219
+ push ebp ;; preserve caller's stack frame pointer
220
+ push esi ;; preserve register variables
221
+ push edi
222
+ push ebx
223
+ ;;
224
+ ;; dest = ylookup[dc_yl] + columnofs[dc_x];
225
+ ;;
226
+ mov ebp,[dc_yl]
227
+ mov ebx,ebp
228
+ mov edi,[ylookup+ebx*4]
229
+ mov ebx,[dc_x]
230
+ add edi,[columnofs+ebx*4] ;; edi = dest
231
+ ;;
232
+ ;; pixelcount = yh - yl + 1
233
+ ;;
234
+ mov eax,[dc_yh]
235
+ inc eax
236
+ sub eax,ebp ;; pixel count
237
+ mov [pixelcount],eax ;; save for final pixel
238
+ jle near vdone ;; nothing to scale
239
+ ;;
240
+ ;; frac = dc_texturemid - (centery-dc_yl)*fracstep;
241
+ ;;
242
+ mov ecx,[dc_iscale] ;; fracstep
243
+ mov eax,[centery]
244
+ sub eax,ebp
245
+ imul eax,ecx
246
+ mov edx,[dc_texturemid]
247
+ sub edx,eax
248
+ mov ebx,edx
249
+ shr ebx,16 ;; frac int.
250
+ and ebx,0x7f
251
+ shl edx,16 ;; y frac up
252
+
253
+ mov ebp,ecx
254
+ shl ebp,16 ;; fracstep f. up
255
+ shr ecx,16 ;; fracstep i. ->cl
256
+ and cl,0x7f
257
+ mov esi,[dc_source]
258
+ ;;
259
+ ;; lets rock :) !
260
+ ;;
261
+ mov eax,[pixelcount]
262
+ mov dh,al
263
+ shr eax,2
264
+ mov ch,al ;; quad count
265
+ mov eax,[dc_colormap]
266
+ test dh,0x3
267
+ je near v4quadloop
268
+ ;;
269
+ ;; do un-even pixel
270
+ ;;
271
+ test dh,0x1
272
+ je two_uneven
273
+
274
+ mov al,[esi+ebx] ;; prep un-even loops
275
+ add edx,ebp ;; ypos f += ystep f
276
+ adc bl,cl ;; ypos i += ystep i
277
+ mov dl,[eax] ;; colormap texel
278
+ and bl,0x7f ;; mask 0-127 texture index
279
+ mov [edi],dl ;; output pixel
280
+ p1: add edi,0x12345678
281
+ ;;
282
+ ;; do two non-quad-aligned pixels
283
+ ;;
284
+ two_uneven:
285
+ test dh,0x2
286
+ je f3
287
+
288
+ mov al,[esi+ebx] ;; fetch source texel
289
+ add edx,ebp ;; ypos f += ystep f
290
+ adc bl,cl ;; ypos i += ystep i
291
+ mov dl,[eax] ;; colormap texel
292
+ and bl,0x7f ;; mask 0-127 texture index
293
+ mov [edi],dl ;; output pixel
294
+ mov al,[esi+ebx]
295
+ add edx,ebp ;; fetch source texel
296
+ adc bl,cl ;; ypos f += ystep f
297
+ mov dl,[eax] ;; ypos i += ystep i
298
+ and bl,0x7f ;; colormap texel
299
+ p2: add edi,0x12345678 ;; mask 0-127 texture index
300
+ mov [edi],dl
301
+ p3: add edi,0x12345678 ;; output pixel
302
+ ;;
303
+ ;; test if there was at least 4 pixels
304
+ ;;
305
+ f3:
306
+ test ch,0xff ;; test quad count
307
+ je near vdone
308
+ ;;
309
+ ;; ebp : ystep frac. upper 16 bits
310
+ ;; edx : y frac. upper 16 bits
311
+ ;; ebx : y i. lower 7 bits, masked for index
312
+ ;; ecx : ch = counter, cl = y step i.
313
+ ;; eax : colormap aligned 256
314
+ ;; esi : source texture column
315
+ ;; edi : dest screen
316
+ ;;
317
+ v4quadloop:
318
+ mov dh,0x7f ;; prep mask
319
+ align 4
320
+ vquadloop:
321
+ mov al,[esi+ebx] ;; prep loop
322
+ add edx,ebp ;; ypos f += ystep f
323
+ adc bl,cl ;; ypos i += ystep i
324
+ mov dl,[eax] ;; colormap texel
325
+ mov [edi],dl ;; output pixel
326
+ and bl,0x7f ;; mask 0-127 texture index
327
+
328
+ mov al,[esi+ebx] ;; fetch source texel
329
+ add edx,ebp
330
+ adc bl,cl
331
+ p4: add edi,0x12345678
332
+ mov dl,[eax]
333
+ and bl,0x7f
334
+ mov [edi],dl
335
+
336
+ mov al,[esi+ebx] ;; fetch source texel
337
+ add edx,ebp
338
+ adc bl,cl
339
+ p5: add edi,0x12345678
340
+ mov dl,[eax]
341
+ and bl,0x7f
342
+ mov [edi],dl
343
+
344
+ mov al,[esi+ebx] ;; fetch source texel
345
+ add edx,ebp
346
+ adc bl,cl
347
+ p6: add edi,0x12345678
348
+ mov dl,[eax]
349
+ and bl,0x7f
350
+ mov [edi],dl
351
+
352
+ p7: add edi,0x12345678
353
+
354
+ dec ch
355
+ jne vquadloop
356
+
357
+ vdone:
358
+ pop ebx ;; restore register variables
359
+ pop edi
360
+ pop esi
361
+ pop ebp ;; restore caller's stack frame pointer
362
+ ret
363
+
364
+ ;;----------------------------------------------------------------------
365
+ ;;13-02-98:
366
+ ;; R_DrawSkyColumn : same as R_DrawColumn but:
367
+ ;;
368
+ ;; - wrap around 256 instead of 127.
369
+ ;; this is needed because we have a higher texture for mouselook,
370
+ ;; we need at least 200 lines for the sky.
371
+ ;;
372
+ ;; NOTE: the sky should never wrap, so it could use a faster method.
373
+ ;; for the moment, we'll still use a wrapping method...
374
+ ;;
375
+ ;; IT S JUST A QUICK CUT N PASTE, WAS NOT OPTIMISED AS IT SHOULD BE !!!
376
+ ;;
377
+ ;;----------------------------------------------------------------------
378
+
379
+ cglobal R_DrawSkyColumn_8
380
+ ; align 16
381
+ R_DrawSkyColumn_8:
382
+ push ebp
383
+ push esi
384
+ push edi
385
+ push ebx
386
+ ;;
387
+ ;; dest = ylookup[dc_yl] + columnofs[dc_x];
388
+ ;;
389
+ mov ebp,[dc_yl]
390
+ mov ebx,ebp
391
+ mov edi,[ylookup+ebx*4]
392
+ mov ebx,[dc_x]
393
+ add edi,[columnofs+ebx*4] ;; edi = dest
394
+ ;;
395
+ ;; pixelcount = yh - yl + 1
396
+ ;;
397
+ mov eax,[dc_yh]
398
+ inc eax
399
+ sub eax,ebp ;; pixel count
400
+ mov [pixelcount],eax ;; save for final pixel
401
+ jle near vskydone ;; nothing to scale
402
+ ;;
403
+ ;; frac = dc_texturemid - (centery-dc_yl)*fracstep;
404
+ ;;
405
+ mov ecx,[dc_iscale] ;; fracstep
406
+ mov eax,[centery]
407
+ sub eax,ebp
408
+ imul eax,ecx
409
+ mov edx,[dc_texturemid]
410
+ sub edx,eax
411
+ mov ebx,edx
412
+ shr ebx,16 ;; frac int.
413
+ and ebx,0xff
414
+ shl edx,16 ;; y frac up
415
+ mov ebp,ecx
416
+ shl ebp,16 ;; fracstep f. up
417
+ shr ecx,16 ;; fracstep i. ->cl
418
+ mov esi,[dc_source]
419
+ ;;
420
+ ;; lets rock :) !
421
+ ;;
422
+ mov eax,[pixelcount]
423
+ mov dh,al
424
+ shr eax,0x2
425
+ mov ch,al ;; quad count
426
+ mov eax,[dc_colormap]
427
+ test dh,0x3
428
+ je vskyquadloop
429
+ ;;
430
+ ;; do un-even pixel
431
+ ;;
432
+ test dh,0x1
433
+ je f2
434
+ mov al,[esi+ebx] ;; prep un-even loops
435
+ add edx,ebp ;; ypos f += ystep f
436
+ adc bl,cl ;; ypos i += ystep i
437
+ mov dl,[eax] ;; colormap texel
438
+ mov [edi],dl ;; output pixel
439
+ p8: add edi,0x12345678
440
+ ;;
441
+ ;; do two non-quad-aligned pixels
442
+ ;;
443
+ f2: test dh,0x2
444
+ je skyf3
445
+
446
+ mov al,[esi+ebx] ;; fetch source texel
447
+ add edx,ebp ;; ypos f += ystep f
448
+ adc bl,cl ;; ypos i += ystep i
449
+ mov dl,[eax] ;; colormap texel
450
+ mov [edi],dl ;; output pixel
451
+
452
+ mov al,[esi+ebx] ;; fetch source texel
453
+ add edx,ebp ;; ypos f += ystep f
454
+ adc bl,cl ;; ypos i += ystep i
455
+ mov dl,[eax] ;; colormap texel
456
+ p9: add edi,0x12345678
457
+ mov [edi],dl ;; output pixel
458
+
459
+ pa: add edi,0x12345678
460
+ ;;
461
+ ;; test if there was at least 4 pixels
462
+ ;;
463
+ skyf3: test ch,0xff ;; test quad count
464
+ je vskydone
465
+ ;;
466
+ ;; ebp : ystep frac. upper 24 bits
467
+ ;; edx : y frac. upper 24 bits
468
+ ;; ebx : y i. lower 7 bits, masked for index
469
+ ;; ecx : ch = counter, cl = y step i.
470
+ ;; eax : colormap aligned 256
471
+ ;; esi : source texture column
472
+ ;; edi : dest screen
473
+ ;;
474
+ align 4
475
+ vskyquadloop:
476
+ mov al,[esi+ebx] ;; prep loop
477
+ add edx,ebp ;; ypos f += ystep f
478
+ mov dl,[eax] ;; colormap texel
479
+ adc bl,cl ;; ypos i += ystep i
480
+ mov [edi],dl ;; output pixel
481
+
482
+ mov al,[esi+ebx] ;; fetch source texel
483
+ add edx,ebp
484
+ adc bl,cl
485
+ pb: add edi,0x12345678
486
+ mov dl,[eax]
487
+ mov [edi],dl
488
+
489
+ mov al,[esi+ebx] ;; fetch source texel
490
+ add edx,ebp
491
+ adc bl,cl
492
+ pc: add edi,0x12345678
493
+ mov dl,[eax]
494
+ mov [edi],dl
495
+
496
+ mov al,[esi+ebx] ;; fetch source texel
497
+ add edx,ebp
498
+ adc bl,cl
499
+ pd: add edi,0x12345678
500
+ mov dl,[eax]
501
+ mov [edi],dl
502
+
503
+ pe: add edi,0x12345678
504
+
505
+ dec ch
506
+ jne vskyquadloop
507
+ vskydone:
508
+ pop ebx
509
+ pop edi
510
+ pop esi
511
+ pop ebp
512
+ ret
513
+
514
+
515
+ ;;----------------------------------------------------------------------
516
+ ;; R_DrawTranslucentColumn_8
517
+ ;;
518
+ ;; Vertical column texture drawer, with transparency. Replaces Doom2's
519
+ ;; 'fuzz' effect, which was not so beautiful.
520
+ ;; Transparency is always impressive in some way, don't know why...
521
+ ;;----------------------------------------------------------------------
522
+
523
+ cglobal R_DrawTranslucentColumn_8
524
+ R_DrawTranslucentColumn_8:
525
+ push ebp ;; preserve caller's stack frame pointer
526
+ push esi ;; preserve register variables
527
+ push edi
528
+ push ebx
529
+ ;;
530
+ ;; dest = ylookup[dc_yl] + columnofs[dc_x];
531
+ ;;
532
+ mov ebp,[dc_yl]
533
+ mov ebx,ebp
534
+ mov edi,[ylookup+ebx*4]
535
+ mov ebx,[dc_x]
536
+ add edi,[columnofs+ebx*4] ;; edi = dest
537
+ ;;
538
+ ;; pixelcount = yh - yl + 1
539
+ ;;
540
+ mov eax,[dc_yh]
541
+ inc eax
542
+ sub eax,ebp ;; pixel count
543
+ mov [pixelcount],eax ;; save for final pixel
544
+ jle near vtdone ;; nothing to scale
545
+ ;;
546
+ ;; frac = dc_texturemid - (centery-dc_yl)*fracstep;
547
+ ;;
548
+ mov ecx,[dc_iscale] ;; fracstep
549
+ mov eax,[centery]
550
+ sub eax,ebp
551
+ imul eax,ecx
552
+ mov edx,[dc_texturemid]
553
+ sub edx,eax
554
+ mov ebx,edx
555
+
556
+ shr ebx,16 ;; frac int.
557
+ and ebx,0x7f
558
+ shl edx,16 ;; y frac up
559
+
560
+ mov ebp,ecx
561
+ shl ebp,16 ;; fracstep f. up
562
+ shr ecx,16 ;; fracstep i. ->cl
563
+ and cl,0x7f
564
+ push cx
565
+ mov ecx,edx
566
+ pop cx
567
+ mov edx,[dc_colormap]
568
+ mov esi,[dc_source]
569
+ ;;
570
+ ;; lets rock :) !
571
+ ;;
572
+ mov eax,[pixelcount]
573
+ shr eax,0x2
574
+ test byte [pixelcount],0x3
575
+ mov ch,al ;; quad count
576
+ mov eax,[dc_transmap]
577
+ je vt4quadloop
578
+ ;;
579
+ ;; do un-even pixel
580
+ ;;
581
+ test byte [pixelcount],0x1
582
+ je trf2
583
+
584
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
585
+ add ecx,ebp
586
+ adc bl,cl
587
+ mov al,[edi] ;; fetch dest : index into colormap
588
+ and bl,0x7f
589
+ mov dl,[eax]
590
+ mov dl,[edx]
591
+ mov [edi],dl
592
+ pf: add edi,0x12345678
593
+ ;;
594
+ ;; do two non-quad-aligned pixels
595
+ ;;
596
+ trf2: test byte [pixelcount],0x2
597
+ je trf3
598
+
599
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
600
+ add ecx,ebp
601
+ adc bl,cl
602
+ mov al,[edi] ;; fetch dest : index into colormap
603
+ and bl,0x7f
604
+ mov dl,[eax]
605
+ mov dl,[edx]
606
+ mov [edi],dl
607
+ pg: add edi,0x12345678
608
+
609
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
610
+ add ecx,ebp
611
+ adc bl,cl
612
+ mov al,[edi] ;; fetch dest : index into colormap
613
+ and bl,0x7f
614
+ mov dl,[eax]
615
+ mov dl,[edx]
616
+ mov [edi],dl
617
+ ph: add edi,0x12345678
618
+ ;;
619
+ ;; test if there was at least 4 pixels
620
+ ;;
621
+ trf3: test ch,0xff ;; test quad count
622
+ je near vtdone
623
+
624
+ ;;
625
+ ;; ebp : ystep frac. upper 24 bits
626
+ ;; edx : y frac. upper 24 bits
627
+ ;; ebx : y i. lower 7 bits, masked for index
628
+ ;; ecx : ch = counter, cl = y step i.
629
+ ;; eax : colormap aligned 256
630
+ ;; esi : source texture column
631
+ ;; edi : dest screen
632
+ ;;
633
+ vt4quadloop:
634
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
635
+ mov [tystep],ebp
636
+ pi: add edi,0x12345678
637
+ mov al,[edi] ;; fetch dest : index into colormap
638
+ pj: sub edi,0x12345678
639
+ mov ebp,edi
640
+ pk: sub edi,0x12345678
641
+ jmp short inloop
642
+ align 4
643
+ vtquadloop:
644
+ add ecx,[tystep]
645
+ adc bl,cl
646
+ q1: add ebp,0x23456789
647
+ and bl,0x7f
648
+ mov dl,[eax]
649
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
650
+ mov dl,[edx]
651
+ mov [edi],dl
652
+ mov al,[ebp] ;; fetch dest : index into colormap
653
+ inloop:
654
+ add ecx,[tystep]
655
+ adc bl,cl
656
+ q2: add edi,0x23456789
657
+ and bl,0x7f
658
+ mov dl,[eax]
659
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
660
+ mov dl,[edx]
661
+ mov [ebp+0x0],dl
662
+ mov al,[edi] ;; fetch dest : index into colormap
663
+
664
+ add ecx,[tystep]
665
+ adc bl,cl
666
+ q3: add ebp,0x23456789
667
+ and bl,0x7f
668
+ mov dl,[eax]
669
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
670
+ mov dl,[edx]
671
+ mov [edi],dl
672
+ mov al,[ebp] ;; fetch dest : index into colormap
673
+
674
+ add ecx,[tystep]
675
+ adc bl,cl
676
+ q4: add edi,0x23456789
677
+ and bl,0x7f
678
+ mov dl,[eax]
679
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
680
+ mov dl,[edx]
681
+ mov [ebp],dl
682
+ mov al,[edi] ;; fetch dest : index into colormap
683
+
684
+ dec ch
685
+ jne vtquadloop
686
+ vtdone:
687
+ pop ebx
688
+ pop edi
689
+ pop esi
690
+ pop ebp
691
+ ret
692
+
693
+
694
+ ;;----------------------------------------------------------------------
695
+ ;; R_DrawShadeColumn
696
+ ;;
697
+ ;; for smoke..etc.. test.
698
+ ;;----------------------------------------------------------------------
699
+ cglobal R_DrawShadeColumn_8
700
+ R_DrawShadeColumn_8:
701
+ push ebp ;; preserve caller's stack frame pointer
702
+ push esi ;; preserve register variables
703
+ push edi
704
+ push ebx
705
+
706
+ ;;
707
+ ;; dest = ylookup[dc_yl] + columnofs[dc_x];
708
+ ;;
709
+ mov ebp,[dc_yl]
710
+ mov ebx,ebp
711
+ mov edi,[ylookup+ebx*4]
712
+ mov ebx,[dc_x]
713
+ add edi,[columnofs+ebx*4] ;; edi = dest
714
+ ;;
715
+ ;; pixelcount = yh - yl + 1
716
+ ;;
717
+ mov eax,[dc_yh]
718
+ inc eax
719
+ sub eax,ebp ;; pixel count
720
+ mov [pixelcount],eax ;; save for final pixel
721
+ jle near shdone ;; nothing to scale
722
+ ;;
723
+ ;; frac = dc_texturemid - (centery-dc_yl)*fracstep;
724
+ ;;
725
+ mov ecx,[dc_iscale] ;; fracstep
726
+ mov eax,[centery]
727
+ sub eax,ebp
728
+ imul eax,ecx
729
+ mov edx,[dc_texturemid]
730
+ sub edx,eax
731
+ mov ebx,edx
732
+ shr ebx,16 ;; frac int.
733
+ and ebx,byte +0x7f
734
+ shl edx,16 ;; y frac up
735
+
736
+ mov ebp,ecx
737
+ shl ebp,16 ;; fracstep f. up
738
+ shr ecx,16 ;; fracstep i. ->cl
739
+ and cl,0x7f
740
+
741
+ mov esi,[dc_source]
742
+ ;;
743
+ ;; lets rock :) !
744
+ ;;
745
+ mov eax,[pixelcount]
746
+ mov dh,al
747
+ shr eax,2
748
+ mov ch,al ;; quad count
749
+ mov eax,[colormaps]
750
+ test dh,3
751
+ je sh4quadloop
752
+ ;;
753
+ ;; do un-even pixel
754
+ ;;
755
+ test dh,0x1
756
+ je shf2
757
+
758
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
759
+ add edx,ebp
760
+ adc bl,cl
761
+ mov al,[edi] ;; fetch dest : index into colormap
762
+ and bl,0x7f
763
+ mov dl,[eax]
764
+ mov [edi],dl
765
+ pl: add edi,0x12345678
766
+ ;;
767
+ ;; do two non-quad-aligned pixels
768
+ ;;
769
+ shf2:
770
+ test dh,0x2
771
+ je shf3
772
+
773
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
774
+ add edx,ebp
775
+ adc bl,cl
776
+ mov al,[edi] ;; fetch dest : index into colormap
777
+ and bl,0x7f
778
+ mov dl,[eax]
779
+ mov [edi],dl
780
+ pm: add edi,0x12345678
781
+
782
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
783
+ add edx,ebp
784
+ adc bl,cl
785
+ mov al,[edi] ;; fetch dest : index into colormap
786
+ and bl,0x7f
787
+ mov dl,[eax]
788
+ mov [edi],dl
789
+ pn: add edi,0x12345678
790
+ ;;
791
+ ;; test if there was at least 4 pixels
792
+ ;;
793
+ shf3:
794
+ test ch,0xff ;; test quad count
795
+ je near shdone
796
+
797
+ ;;
798
+ ;; ebp : ystep frac. upper 24 bits
799
+ ;; edx : y frac. upper 24 bits
800
+ ;; ebx : y i. lower 7 bits, masked for index
801
+ ;; ecx : ch = counter, cl = y step i.
802
+ ;; eax : colormap aligned 256
803
+ ;; esi : source texture column
804
+ ;; edi : dest screen
805
+ ;;
806
+ sh4quadloop:
807
+ mov dh,0x7f ;; prep mask
808
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
809
+ mov [tystep],ebp
810
+ po: add edi,0x12345678
811
+ mov al,[edi] ;; fetch dest : index into colormap
812
+ pp: sub edi,0x12345678
813
+ mov ebp,edi
814
+ pq: sub edi,0x12345678
815
+ jmp short shinloop
816
+
817
+ align 4
818
+ shquadloop:
819
+ add edx,[tystep]
820
+ adc bl,cl
821
+ and bl,dh
822
+ q5: add ebp,0x12345678
823
+ mov dl,[eax]
824
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
825
+ mov [edi],dl
826
+ mov al,[ebp] ;; fetch dest : index into colormap
827
+ shinloop:
828
+ add edx,[tystep]
829
+ adc bl,cl
830
+ and bl,dh
831
+ q6: add edi,0x12345678
832
+ mov dl,[eax]
833
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
834
+ mov [ebp],dl
835
+ mov al,[edi] ;; fetch dest : index into colormap
836
+
837
+ add edx,[tystep]
838
+ adc bl,cl
839
+ and bl,dh
840
+ q7: add ebp,0x12345678
841
+ mov dl,[eax]
842
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
843
+ mov [edi],dl
844
+ mov al,[ebp] ;; fetch dest : index into colormap
845
+
846
+ add edx,[tystep]
847
+ adc bl,cl
848
+ and bl,dh
849
+ q8: add edi,0x12345678
850
+ mov dl,[eax]
851
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
852
+ mov [ebp],dl
853
+ mov al,[edi] ;; fetch dest : index into colormap
854
+
855
+ dec ch
856
+ jne shquadloop
857
+
858
+ shdone:
859
+ pop ebx ;; restore register variables
860
+ pop edi
861
+ pop esi
862
+ pop ebp ;; restore caller's stack frame pointer
863
+ ret
864
+
865
+
866
+
867
+ ;;----------------------------------------------------------------------
868
+ ;;
869
+ ;; R_DrawSpan
870
+ ;;
871
+ ;; Horizontal texture mapping
872
+ ;;
873
+ ;;----------------------------------------------------------------------
874
+
875
+
876
+ [SECTION .data]
877
+
878
+ oldcolormap dd 0
879
+
880
+ [SECTION CODE_SEG write]
881
+
882
+ cglobal R_DrawSpan_8
883
+ R_DrawSpan_8:
884
+ push ebp ;; preserve caller's stack frame pointer
885
+ push esi ;; preserve register variables
886
+ push edi
887
+ push ebx
888
+ ;;
889
+ ;; initilise registers
890
+ ;;
891
+
892
+ mov edx, [ds_xfrac]
893
+ mov eax, [ds_ystep]
894
+ ror edx, 14
895
+ ror eax, 15
896
+ mov bl, dl
897
+ mov ecx, [ds_xstep]
898
+ mov dh, al
899
+ mov ax, 1
900
+ mov [tystep], eax
901
+
902
+
903
+ mov eax, [ds_yfrac]
904
+ ror ecx, 13
905
+ ror eax, 16
906
+ mov dl, cl
907
+ mov bh, al
908
+ xor cx, cx
909
+ and ebx, 0x3fff
910
+ mov [pixelcount],ecx
911
+
912
+ mov ecx, [ds_x2]
913
+ mov edi, [ds_y]
914
+ mov esi, [ds_x1]
915
+ mov edi, [ylookup+edi*4]
916
+ mov ebp, ebx
917
+ add edi, [columnofs+esi*4]
918
+ sub esi, ecx ;; pixel count
919
+ shr ebp, 2
920
+ mov ecx, [ds_colormap]
921
+ mov ax, si
922
+ mov esi, [ds_source]
923
+ sar ax,1
924
+ jnc near .midloop ;; check parity
925
+
926
+ ; summary
927
+ ; edx = high16bit xfrac[0..13], ah=ystep[16..24] al=xtep[14..21]
928
+ ; ebx = high16bit =0, bh=yfrac[16..24], bl=xfrac[14..21]
929
+ ; ecx = colormap table cl=0 (colormap is aligned 8 bits)
930
+ ; eax = high16bit yfrac[0..15], dx = count
931
+ ; esi = flat texture source
932
+ ; edi = screeen buffer destination
933
+ ; ebp = work register
934
+ ; pixelcount = high16bit xstep[0..13] rest to 0
935
+ ; tystep = high16bit ystep[0..15] low 16 bit = 2 (increment of count)
936
+
937
+ align 4
938
+ .loop
939
+ add eax, [tystep]
940
+ mov cl, [esi+ebp]
941
+ adc bh, dh
942
+ mov cl, [ecx]
943
+ and bh, 0x3f
944
+ mov [edi], cl
945
+ mov ebp, ebx
946
+ inc edi
947
+ shr ebp, 2
948
+
949
+ .midloop:
950
+ add edx, [pixelcount]
951
+ mov cl, [esi+ebp]
952
+ adc bl, dl
953
+ mov cl, [ecx]
954
+ mov ebp, ebx
955
+ mov [edi], cl
956
+ inc edi
957
+ shr ebp, 2
958
+
959
+ test eax, 0xffff
960
+ jnz near .loop
961
+
962
+ .hdone: pop ebx ;; restore register variables
963
+ pop edi
964
+ pop esi
965
+ pop ebp ;; restore caller's stack frame pointer
966
+ ret
967
+
968
+
969
+ [SECTION .data]
970
+
971
+ obelix dd 0
972
+ etaussi dd 0
973
+
974
+ [SECTION CODE_SEG]
975
+
976
+ cglobal R_DrawSpan_8_old
977
+ R_DrawSpan_8_old:
978
+ push ebp ;; preserve caller's stack frame pointer
979
+ push esi ;; preserve register variables
980
+ push edi
981
+ push ebx
982
+ ;;
983
+ ;; find loop count
984
+ ;;
985
+ mov eax,[ds_x2]
986
+ inc eax
987
+ sub eax,[ds_x1] ;; pixel count
988
+ mov [pixelcount],eax ;; save for final pixel
989
+ js near .hdone ;; nothing to scale
990
+ shr eax,0x1 ;; double pixel count
991
+ mov [loopcount],eax
992
+ ;;
993
+ ;; build composite position
994
+ ;;
995
+ mov ebp,[ds_xfrac]
996
+ shl ebp,10
997
+ and ebp,0xffff0000
998
+ mov eax,[ds_yfrac]
999
+ shr eax,6
1000
+ and eax,0xffff
1001
+ mov edi,[ds_y]
1002
+ or ebp,eax
1003
+
1004
+ mov esi,[ds_source]
1005
+ ;;
1006
+ ;; calculate screen dest
1007
+ ;;
1008
+ mov edi,[ylookup+edi*4]
1009
+ mov eax,[ds_x1]
1010
+ add edi,[columnofs+eax*4]
1011
+ ;;
1012
+ ;; build composite step
1013
+ ;;
1014
+ mov ebx,[ds_xstep]
1015
+ shl ebx,10
1016
+ and ebx,0xffff0000
1017
+ mov eax,[ds_ystep]
1018
+ shr eax,6
1019
+ and eax,0xffff
1020
+ or ebx,eax
1021
+
1022
+ mov [obelix],ebx
1023
+ mov [etaussi],esi
1024
+
1025
+ ;; %eax aligned colormap
1026
+ ;; %ebx aligned colormap
1027
+ ;; %ecx,%edx scratch
1028
+ ;; %esi virtual source
1029
+ ;; %edi moving destination pointer
1030
+ ;; %ebp frac
1031
+
1032
+ mov eax,[ds_colormap]
1033
+ mov ecx,ebp
1034
+ add ebp,ebx ;; advance frac pointer
1035
+ shr cx,10
1036
+ rol ecx,6
1037
+ and ecx,4095 ;; finish calculation for third pixel
1038
+ mov edx,ebp
1039
+ shr dx,10
1040
+ rol edx,6
1041
+ add ebp,ebx ;; advance frac pointer
1042
+ and edx,4095 ;; finish calculation for fourth pixel
1043
+ mov ebx,eax
1044
+ mov al,[esi+ecx] ;; get first pixel
1045
+ mov bl,[esi+edx] ;; get second pixel
1046
+
1047
+ test dword [pixelcount],0xfffffffe
1048
+
1049
+ mov dl,[eax] ;; color translate first pixel
1050
+
1051
+ ;; movw $0xf0f0,%dx ;;see visplanes start
1052
+
1053
+ je .hchecklast
1054
+
1055
+ mov dh,[ebx] ;; color translate second pixel
1056
+ mov esi,[loopcount]
1057
+ align 4
1058
+ .hdoubleloop:
1059
+ mov ecx,ebp
1060
+ shr cx,10
1061
+ rol ecx,6
1062
+ add ebp,[obelix] ;; advance frac pointer
1063
+ mov [edi],dx ;; write first pixel
1064
+ and ecx,4095 ;; finish calculation for third pixel
1065
+ mov edx,ebp
1066
+ shr dx,10
1067
+ rol edx,6
1068
+ add ecx,[etaussi]
1069
+ and edx,4095 ;; finish calculation for fourth pixel
1070
+ mov al,[ecx] ;; get third pixel
1071
+ add ebp,[obelix] ;; advance frac pointer
1072
+ add edx,[etaussi]
1073
+ mov bl,[edx] ;; get fourth pixel
1074
+ mov dl,[eax] ;; color translate third pixel
1075
+ add edi,byte +0x2 ;; advance to third pixel destination
1076
+ dec esi ;; done with loop?
1077
+ mov dh,[ebx] ;; color translate fourth pixel
1078
+ jne .hdoubleloop
1079
+ ;; check for final pixel
1080
+ .hchecklast:
1081
+ test dword [pixelcount],0x1
1082
+ je .hdone
1083
+ mov [edi],dl ;; write final pixel
1084
+ .hdone: pop ebx ;; restore register variables
1085
+ pop edi
1086
+ pop esi
1087
+ pop ebp ;; restore caller's stack frame pointer
1088
+ ret
1089
+
1090
+
1091
+ ;; ========================================================================
1092
+ ;; Rasterization des segments d'un polyg�ne textur� de mani�re LINEAIRE.
1093
+ ;; Il s'agit donc d'interpoler les coordonn�es aux bords de la texture en
1094
+ ;; m�me temps que les abscisses minx/maxx pour chaque ligne.
1095
+ ;; L'argument 'dir' indique quels bords de la texture sont interpol�s:
1096
+ ;; 0 : segments associ�s aux bord SUPERIEUR et INFERIEUR ( TY constant )
1097
+ ;; 1 : segments associ�s aux bord GAUCHE et DROITE ( TX constant )
1098
+ ;; ========================================================================
1099
+ ;;
1100
+ ;; void rasterize_segment_tex( LONG x1, LONG y1, LONG x2, LONG y2, LONG tv1, LONG tv2, LONG tc, LONG dir );
1101
+ ;; ARG1 ARG2 ARG3 ARG4 ARG5 ARG6 ARG7 ARG8
1102
+ ;;
1103
+ ;; Pour dir = 0, (tv1,tv2) = (tX1,tX2), tc = tY, en effet TY est constant.
1104
+ ;;
1105
+ ;; Pour dir = 1, (tv1,tv2) = (tY1,tY2), tc = tX, en effet TX est constant.
1106
+ ;;
1107
+ ;;
1108
+ ;; Uses: extern struct rastery *_rastertab;
1109
+ ;;
1110
+
1111
+ [SECTION CODE_SEG write]
1112
+
1113
+ MINX EQU 0
1114
+ MAXX EQU 4
1115
+ TX1 EQU 8
1116
+ TY1 EQU 12
1117
+ TX2 EQU 16
1118
+ TY2 EQU 20
1119
+ RASTERY_SIZEOF EQU 24
1120
+
1121
+ cglobal rasterize_segment_tex
1122
+ rasterize_segment_tex:
1123
+ push ebp
1124
+ mov ebp,esp
1125
+
1126
+ sub esp,byte +0x8 ;; alloue les variables locales
1127
+
1128
+ push ebx
1129
+ push esi
1130
+ push edi
1131
+ o16 mov ax,es
1132
+ push eax
1133
+
1134
+ ;; #define DX [ebp-4]
1135
+ ;; #define TD [ebp-8]
1136
+
1137
+ mov eax,[ebp+0xc] ;; y1
1138
+ mov ebx,[ebp+0x14] ;; y2
1139
+ cmp ebx,eax
1140
+ je near .L_finished ;; special (y1==y2) segment horizontal, exit!
1141
+
1142
+ jg near .L_rasterize_right
1143
+
1144
+ ;;rasterize_left: ;; on rasterize un segment � la GAUCHE du polyg�ne
1145
+
1146
+ mov ecx,eax
1147
+ sub ecx,ebx
1148
+ inc ecx ;; y1-y2+1
1149
+
1150
+ mov eax,RASTERY_SIZEOF
1151
+ mul ebx ;; * y2
1152
+ mov esi,[prastertab]
1153
+ add esi,eax ;; point into rastertab[y2]
1154
+
1155
+ mov eax,[ebp+0x8] ;; ARG1
1156
+ sub eax,[ebp+0x10] ;; ARG3
1157
+ shl eax,0x10 ;; ((x1-x2)<<PRE) ...
1158
+ cdq
1159
+ idiv ecx ;; dx = ... / (y1-y2+1)
1160
+ mov [ebp-0x4],eax ;; DX
1161
+
1162
+ mov eax,[ebp+0x18] ;; ARG5
1163
+ sub eax,[ebp+0x1c] ;; ARG6
1164
+ shl eax,0x10
1165
+ cdq
1166
+ idiv ecx ;; tdx =((tx1-tx2)<<PRE) / (y1-y2+1)
1167
+ mov [ebp-0x8],eax ;; idem tdy =((ty1-ty2)<<PRE) / (y1-y2+1)
1168
+
1169
+ mov eax,[ebp+0x10] ;; ARG3
1170
+ shl eax,0x10 ;; x = x2<<PRE
1171
+
1172
+ mov ebx,[ebp+0x1c] ;; ARG6
1173
+ shl ebx,0x10 ;; tx = tx2<<PRE d0
1174
+ ;; ty = ty2<<PRE d1
1175
+ mov edx,[ebp+0x20] ;; ARG7
1176
+ shl edx,0x10 ;; ty = ty<<PRE d0
1177
+ ;; tx = tx<<PRE d1
1178
+ push ebp
1179
+ mov edi,[ebp-0x4] ;; DX
1180
+ cmp dword [ebp+0x24],byte +0x0 ;; ARG8 direction ?
1181
+
1182
+ mov ebp,[ebp-0x8] ;; TD
1183
+ je .L_rleft_h_loop
1184
+ ;;
1185
+ ;; TY varie, TX est constant
1186
+ ;;
1187
+ .L_rleft_v_loop:
1188
+ mov [esi+MINX],eax ;; rastertab[y].minx = x
1189
+ add ebx,ebp
1190
+ mov [esi+TX1],edx ;; .tx1 = tx
1191
+ add eax,edi
1192
+ mov [esi+TY1],ebx ;; .ty1 = ty
1193
+
1194
+ ;;addl DX, %eax // x += dx
1195
+ ;;addl TD, %ebx // ty += tdy
1196
+
1197
+ add esi,RASTERY_SIZEOF ;; next raster line into rastertab[]
1198
+ dec ecx
1199
+ jne .L_rleft_v_loop
1200
+ pop ebp
1201
+ jmp .L_finished
1202
+ ;;
1203
+ ;; TX varie, TY est constant
1204
+ ;;
1205
+ .L_rleft_h_loop:
1206
+ mov [esi+MINX],eax ;; rastertab[y].minx = x
1207
+ add eax,edi
1208
+ mov [esi+TX1],ebx ;; .tx1 = tx
1209
+ add ebx,ebp
1210
+ mov [esi+TY1],edx ;; .ty1 = ty
1211
+
1212
+ ;;addl DX, %eax // x += dx
1213
+ ;;addl TD, %ebx // tx += tdx
1214
+
1215
+ add esi,RASTERY_SIZEOF ;; next raster line into rastertab[]
1216
+ dec ecx
1217
+ jne .L_rleft_h_loop
1218
+ pop ebp
1219
+ jmp .L_finished
1220
+ ;;
1221
+ ;; on rasterize un segment � la DROITE du polyg�ne
1222
+ ;;
1223
+ .L_rasterize_right:
1224
+ mov ecx,ebx
1225
+ sub ecx,eax
1226
+ inc ecx ;; y2-y1+1
1227
+
1228
+ mov ebx,RASTERY_SIZEOF
1229
+ mul ebx ;; * y1
1230
+ mov esi,[prastertab]
1231
+ add esi,eax ;; point into rastertab[y1]
1232
+
1233
+ mov eax,[ebp+0x10] ;; ARG3
1234
+ sub eax,[ebp+0x8] ;; ARG1
1235
+ shl eax,0x10 ;; ((x2-x1)<<PRE) ...
1236
+ cdq
1237
+ idiv ecx ;; dx = ... / (y2-y1+1)
1238
+ mov [ebp-0x4],eax ;; DX
1239
+
1240
+ mov eax,[ebp+0x1c] ;; ARG6
1241
+ sub eax,[ebp+0x18] ;; ARG5
1242
+ shl eax,0x10
1243
+ cdq
1244
+ idiv ecx ;; tdx =((tx2-tx1)<<PRE) / (y2-y1+1)
1245
+ mov [ebp-0x8],eax ;; idem tdy =((ty2-ty1)<<PRE) / (y2-y1+1)
1246
+
1247
+ mov eax,[ebp+0x8] ;; ARG1
1248
+ shl eax,0x10 ;; x = x1<<PRE
1249
+
1250
+ mov ebx,[ebp+0x18] ;; ARG5
1251
+ shl ebx,0x10 ;; tx = tx1<<PRE d0
1252
+ ;; ty = ty1<<PRE d1
1253
+ mov edx,[ebp+0x20] ;; ARG7
1254
+ shl edx,0x10 ;; ty = ty<<PRE d0
1255
+ ;; tx = tx<<PRE d1
1256
+ push ebp
1257
+ mov edi,[ebp-0x4] ;; DX
1258
+
1259
+ cmp dword [ebp+0x24], 0 ;; direction ?
1260
+
1261
+ mov ebp,[ebp-0x8] ;; TD
1262
+ je .L_rright_h_loop
1263
+ ;;
1264
+ ;; TY varie, TX est constant
1265
+ ;;
1266
+ .L_rright_v_loop:
1267
+
1268
+ mov [esi+MAXX],eax ;; rastertab[y].maxx = x
1269
+ add ebx,ebp
1270
+ mov [esi+TX2],edx ;; .tx2 = tx
1271
+ add eax,edi
1272
+ mov [esi+TY2],ebx ;; .ty2 = ty
1273
+
1274
+ ;;addl DX, %eax // x += dx
1275
+ ;;addl TD, %ebx // ty += tdy
1276
+
1277
+ add esi,RASTERY_SIZEOF
1278
+ dec ecx
1279
+ jne .L_rright_v_loop
1280
+
1281
+ pop ebp
1282
+
1283
+ jmp short .L_finished
1284
+ ;;
1285
+ ;; TX varie, TY est constant
1286
+ ;;
1287
+ .L_rright_h_loop:
1288
+ mov [esi+MAXX],eax ;; rastertab[y].maxx = x
1289
+ add eax,edi
1290
+ mov [esi+TX2],ebx ;; .tx2 = tx
1291
+ add ebx,ebp
1292
+ mov [esi+TY2],edx ;; .ty2 = ty
1293
+
1294
+ ;;addl DX, %eax // x += dx
1295
+ ;;addl TD, %ebx // tx += tdx
1296
+
1297
+ add esi,RASTERY_SIZEOF
1298
+ dec ecx
1299
+ jne .L_rright_h_loop
1300
+
1301
+ pop ebp
1302
+
1303
+ .L_finished:
1304
+ pop eax
1305
+ o16 mov es,ax
1306
+ pop edi
1307
+ pop esi
1308
+ pop ebx
1309
+
1310
+ mov esp,ebp
1311
+ pop ebp
1312
+ ret
1313
+
1314
+
1315
+ ;;; this version can draw 64x64 tiles, but they would have to be arranged 4 per row,
1316
+ ;; so that the stride from one line to the next is 256
1317
+ ;;
1318
+ ;; .data
1319
+ ;;xstep dd 0
1320
+ ;;ystep dd 0
1321
+ ;;texwidth dd 64 ;; texture width
1322
+ ;; .text
1323
+ ;; this code is kept in case we add high-detail floor textures for example (256x256)
1324
+ ; align 16
1325
+ ;_R_DrawSpan_8:
1326
+ ; push ebp ;; preserve caller's stack frame pointer
1327
+ ; push esi ;; preserve register variables
1328
+ ; push edi
1329
+ ; push ebx
1330
+ ;;
1331
+ ;; find loop count
1332
+ ;;
1333
+ ; mov eax,[ds_x2]
1334
+ ; inc eax
1335
+ ; sub eax,[ds_x1] ;; pixel count
1336
+ ; mov [pixelcount],eax ;; save for final pixel
1337
+ ; js near .hdone ;; nothing to scale
1338
+ ;;
1339
+ ;; calculate screen dest
1340
+ ;;
1341
+ ; mov edi,[ds_y]
1342
+ ; mov edi,[ylookup+edi*4]
1343
+ ; mov eax,[ds_x1]
1344
+ ; add edi,[columnofs+eax*4]
1345
+ ;;
1346
+ ;; prepare registers for inner loop
1347
+ ;;
1348
+ ; xor eax,eax
1349
+ ; mov edx,[ds_xfrac]
1350
+ ; ror edx,16
1351
+ ; mov al,dl
1352
+ ; mov ecx,[ds_yfrac]
1353
+ ; ror ecx,16
1354
+ ; mov ah,cl
1355
+ ;
1356
+ ; mov ebx,[ds_xstep]
1357
+ ; ror ebx,16
1358
+ ; mov ch,bl
1359
+ ; and ebx,0xffff0000
1360
+ ; mov [xstep],ebx
1361
+ ; mov ebx,[ds_ystep]
1362
+ ; ror ebx,16
1363
+ ; mov dh,bl
1364
+ ; and ebx,0xffff0000
1365
+ ; mov [ystep],ebx
1366
+ ;
1367
+ ; mov esi,[ds_source]
1368
+ ;
1369
+ ;;; %eax Yi,Xi in %ah,%al
1370
+ ;;; %ebx aligned colormap
1371
+ ;;; %ecx Yfrac upper, dXi in %ch, %cl is counter (upto 1024pels, =4x256)
1372
+ ;;; %edx Xfrac upper, dYi in %dh, %dl receives mapped pixels from (ebx)
1373
+ ;;; ystep dYfrac, add to %ecx, low word is 0
1374
+ ;;; xstep dXfrac, add to %edx, low word is 0
1375
+ ;;; %ebp temporary register serves as offset like %eax
1376
+ ;;; %esi virtual source
1377
+ ;;; %edi moving destination pointer
1378
+ ;
1379
+ ; mov ebx,[pixelcount]
1380
+ ; shr ebx,0x2 ;; 4 pixels per loop
1381
+ ; test bl,0xff
1382
+ ; je near .hchecklast
1383
+ ; mov cl,bl
1384
+ ;
1385
+ ; mov ebx,[dc_colormap]
1386
+ ;;;
1387
+ ;;; prepare loop with first pixel
1388
+ ;;;
1389
+ ; add ecx,[ystep] ;;pr�a1
1390
+ ; adc ah,dh
1391
+ ; add edx,[xstep]
1392
+ ; adc al,ch
1393
+ ; and eax,0x3f3f
1394
+ ; mov bl,[esi+eax] ;;pr�b1
1395
+ ; mov dl,[ebx] ;;pr�c1
1396
+ ;
1397
+ ; add ecx,[ystep] ;;a2
1398
+ ; adc ah,dh
1399
+ ;
1400
+ ;.hdoubleloop:
1401
+ ; mov [edi+1],dl
1402
+ ; add edx,[xstep]
1403
+ ; adc al,ch
1404
+ ; add edi,byte +0x2
1405
+ ; mov ebp,eax
1406
+ ; add ecx,[ystep]
1407
+ ; adc ah,dh
1408
+ ; and ebp,0x3f3f
1409
+ ; add edx,[xstep]
1410
+ ; mov bl,[esi+ebp]
1411
+ ; adc al,ch
1412
+ ; mov dl,[ebx]
1413
+ ; and eax,0x3f3f
1414
+ ; mov [edi],dl
1415
+ ; mov bl,[esi+eax]
1416
+ ; add ecx,[ystep]
1417
+ ; adc ah,dh
1418
+ ; add edx,[xstep]
1419
+ ; adc al,ch
1420
+ ; mov dl,[ebx]
1421
+ ; mov ebp,eax
1422
+ ; mov [edi+1],dl
1423
+ ; and ebp,0x3f3f
1424
+ ; add ecx,[ystep]
1425
+ ; adc ah,dh
1426
+ ; mov bl,[esi+ebp]
1427
+ ; add edi,byte +0x2
1428
+ ; add edx,[xstep]
1429
+ ; adc al,ch
1430
+ ; mov dl,[ebx]
1431
+ ; and eax,0x3f3f
1432
+ ; mov [edi],dl
1433
+ ; mov bl,[esi+eax]
1434
+ ; add ecx,[ystep]
1435
+ ; adc ah,dh
1436
+ ; mov dl,[ebx]
1437
+ ; dec cl
1438
+ ; jne near .hdoubleloop
1439
+ ;;; check for final pixel
1440
+ ;.hchecklast:
1441
+ ;;; to do
1442
+ ;.hdone:
1443
+ ; pop ebx
1444
+ ; pop edi
1445
+ ; pop esi
1446
+ ; pop ebp
1447
+ ; ret