laag-nasm 2.13.03.2

Sign up to get free protection for your applications and to get access to all the features.
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