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,9 @@
1
+ @echo off
2
+ rem some batch file to bind nasm and ndisasm with pmode/w
3
+ rem a mega cool dos extender for watcom done by tran
4
+ rem
5
+ rem max 8 megs, dpmi stack 256*16=4096, no banner
6
+ pmwlite.exe nasm.exe
7
+ pmwsetup.exe /X8388608 /P256 /B0 nasm.exe
8
+ pmwlite.exe ndisasm.exe
9
+ pmwsetup.exe /X8388608 /P256 /B0 ndisasm.exe
@@ -0,0 +1,441 @@
1
+ ;--------=========xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=========--------
2
+ ;
3
+ ; Copyright (C) 1999 by Andrew Zabolotny
4
+ ; Miscelaneous NASM macros that makes use of new preprocessor features
5
+ ;
6
+ ; This library is free software; you can redistribute it and/or
7
+ ; modify it under the terms of the GNU Library General Public
8
+ ; License as published by the Free Software Foundation; either
9
+ ; version 2 of the License, or (at your option) any later version.
10
+ ;
11
+ ; This library is distributed in the hope that it will be useful,
12
+ ; but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ ; Library General Public License for more details.
15
+ ;
16
+ ; You should have received a copy of the GNU Library General Public
17
+ ; License along with this library; if not, write to the Free
18
+ ; Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19
+ ;
20
+ ;--------=========xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=========--------
21
+
22
+ ; The macros in this file provides support for writing 32-bit C-callable
23
+ ; NASM routines. For a short description of every macros see the
24
+ ; corresponding comment before every one. Simple usage example:
25
+ ;
26
+ ; proc sin,1
27
+ ; targ %$angle
28
+ ; fld %$angle
29
+ ; fsin
30
+ ; endproc sin
31
+
32
+ %ifndef __PROC32_ASH__
33
+ %define __PROC32_ASH__
34
+
35
+ [WARNING -macro-selfref]
36
+
37
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
38
+ ; Summary:
39
+ ; Mangle a name to be compatible with the C compiler
40
+ ; Arguments:
41
+ ; The name
42
+ ; Example:
43
+ ; cname (my_func)
44
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
45
+ %ifdef EXTERNC_UNDERSCORE
46
+ %define cname(x) _ %+ x
47
+ %else
48
+ %define cname(x) x
49
+ %endif
50
+
51
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
52
+ ; Summary:
53
+ ; Import an external C procedure definition
54
+ ; Arguments:
55
+ ; The name of external C procedure
56
+ ; Example:
57
+ ; cextern printf
58
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
59
+ %macro cextern 1
60
+ %xdefine %1 cname(%1)
61
+ %ifidni __OUTPUT_FORMAT__,obj
62
+ extern %1:wrt FLAT
63
+ %else
64
+ extern %1
65
+ %endif
66
+ %endmacro
67
+
68
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
69
+ ; Summary:
70
+ ; Export an C procedure definition
71
+ ; Arguments:
72
+ ; The name of C procedure
73
+ ; Example:
74
+ ; cglobal my_printf
75
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
76
+ %macro cglobal 1
77
+ %xdefine %1 cname(%1)
78
+ global %1
79
+ %endmacro
80
+
81
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
82
+ ; Summary:
83
+ ; Misc macros to deal with PIC shared libraries
84
+ ; Comment:
85
+ ; Note that we have a different syntax for working with and without
86
+ ; PIC shared libraries. In a PIC environment we should load first
87
+ ; the address of the variable into a register and then work through
88
+ ; that address, i.e: mov eax,myvar; mov [eax],1
89
+ ; In a non-PIC environment we should directly write: mov myvar,1
90
+ ; Example:
91
+ ; extvar myvar
92
+ ; GetGOT
93
+ ; %ifdef PIC
94
+ ; mov ebx,myvar ; get offset of myvar into ebx
95
+ ; %else
96
+ ; lea ebx,myvar
97
+ ; %endif
98
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
99
+ %ifdef PIC
100
+ cextern _GLOBAL_OFFSET_TABLE_
101
+ %macro GetGOT 0
102
+ %ifdef .$proc.stkofs
103
+ %assign .$proc.stkofs .$proc.stkofs+4
104
+ %endif
105
+ call %$Get_GOT
106
+ %$Get_GOT:
107
+ pop ebx
108
+ add ebx,_GLOBAL_OFFSET_TABLE_ + $$ - %$Get_GOT wrt ..gotpc
109
+ %endmacro
110
+ %macro extvar 1
111
+ cextern %1
112
+ %xdefine %1 [ebx+%1 wrt ..got]
113
+ %endmacro
114
+ %else
115
+ %define GetGOT
116
+ %macro extvar 1
117
+ cextern %1
118
+ %endmacro
119
+ %endif
120
+
121
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
122
+ ; Summary:
123
+ ; Begin a procedure definition
124
+ ; For performance reasons we don't use stack frame pointer EBP,
125
+ ; instead we're using the [esp+xx] addressing. Because of this
126
+ ; you should be careful when you work with stack pointer.
127
+ ; The push/pop instructions are macros that are defined to
128
+ ; deal correctly with these issues.
129
+ ; Arguments:
130
+ ; First argument - the procedure name
131
+ ; Second optional argument - the number of bytes for local variables
132
+ ; The following arguments could specify the registers that should be
133
+ ; pushed at beginning of procedure and popped before exiting
134
+ ; Example:
135
+ ; proc MyTestProc
136
+ ; proc MyTestProc,4,ebx,esi,edi
137
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
138
+ %macro proc 1-3+ 0
139
+ cglobal %1
140
+ %push %1
141
+ align 16
142
+ %1:
143
+ %xdefine %$proc.name %1
144
+ ; total size of local arguments
145
+ %assign %$proc.locsize (%2+3) & 0xFFFC
146
+ ; offset from esp to argument
147
+ %assign %$proc.argofs 4+%$proc.locsize
148
+ ; additional offset to args (tracks push/pops)
149
+ %assign .$proc.stkofs 0
150
+ ; offset from esp to local arguments
151
+ %assign %$proc.locofs 0
152
+ ; Now push the registers that we should save
153
+ %define %$proc.save %3
154
+ %if %$proc.locsize != 0
155
+ sub esp,%$proc.locsize
156
+ %endif
157
+ push %$proc.save
158
+ %endmacro
159
+
160
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
161
+ ; Summary:
162
+ ; Declare an argument passed on stack
163
+ ; This macro defines two additional macros:
164
+ ; first (with the name given by first argument) - [esp+xx]
165
+ ; second (with a underscore appended to first argument) - esp+xx
166
+ ; Arguments:
167
+ ; First argument defines the procedure argument name
168
+ ; Second optional parameter defines the size of the argument
169
+ ; Default value is 4 (a double word)
170
+ ; Example:
171
+ ; arg .my_float
172
+ ; arg .my_double,8
173
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
174
+ %macro arg 1-2 4
175
+ %ifndef %$proc.argofs
176
+ %error "`arg' not in a proc context"
177
+ %else
178
+ ; Trick: temporary undefine .$proc.stkofs so that it won't be expanded
179
+ %assign %%. .$proc.stkofs
180
+ %undef .$proc.stkofs
181
+ %xdefine %{1}_ esp+%$proc.argofs+.$proc.stkofs
182
+ %xdefine %1 [esp+%$proc.argofs+.$proc.stkofs]
183
+ %assign .$proc.stkofs %%.
184
+ %assign %$proc.argofs %2+%$proc.argofs
185
+ %endif
186
+ %endmacro
187
+
188
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
189
+ ; Summary:
190
+ ; Declare an local variable
191
+ ; first (with the name given by first argument) - [esp+xx]
192
+ ; second (with a slash prefixing the first argument) - esp+xx
193
+ ; Arguments:
194
+ ; First argument defines the procedure argument name
195
+ ; Second optional parameter defines the size of the argument
196
+ ; Default value is 4 (a double word)
197
+ ; Example:
198
+ ; loc .int_value
199
+ ; loc .double_value,8
200
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
201
+ %macro loc 1-2 4
202
+ %ifndef %$proc.locofs
203
+ %error "`loc' not in a proc context"
204
+ %elif %$proc.locofs + %2 > %$proc.locsize
205
+ %error "local stack space exceeded"
206
+ %else
207
+ %assign %%. .$proc.stkofs
208
+ %undef .$proc.stkofs
209
+ %xdefine %{1}_ esp+%$proc.locofs+.$proc.stkofs
210
+ %xdefine %1 [esp+%$proc.locofs+.$proc.stkofs]
211
+ %assign .$proc.stkofs %%.
212
+ %assign %$proc.locofs %$proc.locofs+%2
213
+ %endif
214
+ %endmacro
215
+
216
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
217
+ ; Summary:
218
+ ; Get the type of given size into context-local variable %$type
219
+ ; Arguments:
220
+ ; Size of type we want (1,2,4,8 or 10)
221
+ ; Example:
222
+ ; type 4 ; gives "dword"
223
+ ; type 10 ; gives "tword"
224
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
225
+ %macro type 1
226
+ %if %1 = 1
227
+ %define %$type byte
228
+ %elif %1 = 2
229
+ %define %$type word
230
+ %elif %1 = 4
231
+ %define %$type dword
232
+ %elif %1 = 8
233
+ %define %$type qword
234
+ %elif %1 = 10
235
+ %define %$type tword
236
+ %else
237
+ %define %$. %1
238
+ %error "unknown type for argument size %$."
239
+ %endif
240
+ %endmacro
241
+
242
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
243
+ ; Summary:
244
+ ; Same as `arg' but prepends "word", "dword" etc (typed arg)
245
+ ; first (with the name given by first argument) - dword [esp+xx]
246
+ ; second (with a slash prefixing the first argument) - esp+xx
247
+ ; Arguments:
248
+ ; Same as for `arg'
249
+ ; Example:
250
+ ; targ .my_float ; .my_float is now "dword [esp+xxx]"
251
+ ; targ .my_double,8 ; .my_double is now "qword [esp+xxx]"
252
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
253
+ %macro targ 1-2 4
254
+ %ifndef %$proc.argofs
255
+ %error "`targ' not in a proc context"
256
+ %else
257
+ arg %1,%2
258
+ type %2
259
+ %assign %%. .$proc.stkofs
260
+ %undef .$proc.stkofs
261
+ %xdefine %1 %$type %1
262
+ %assign .$proc.stkofs %%.
263
+ %endif
264
+ %endmacro
265
+
266
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
267
+ ; Summary:
268
+ ; Same as `loc' but prepends "word", "dword" etc (typed loc)
269
+ ; first (with the name given by first argument) - dword [esp+xx]
270
+ ; second (with a slash prefixing the first argument) - esp+xx
271
+ ; Arguments:
272
+ ; Same as for `loc'
273
+ ; Example:
274
+ ; tloc int_value
275
+ ; tloc double_value,8
276
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
277
+ %macro tloc 1-2 4
278
+ %ifndef %$proc.locofs
279
+ %error "`tloc' not in a proc context"
280
+ %else
281
+ loc %1,%2
282
+ type %2
283
+ %assign %%. .$proc.stkofs
284
+ %undef .$proc.stkofs
285
+ %xdefine %1 %$type %1
286
+ %assign .$proc.stkofs %%.
287
+ %endif
288
+ %endmacro
289
+
290
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
291
+ ; Summary:
292
+ ; Finish a procedure
293
+ ; Gives an error if proc/endproc pairs mismatch
294
+ ; Defines an label called __end_(procedure name)
295
+ ; which is useful for calculating function size
296
+ ; Arguments:
297
+ ; (optional) The name of procedure
298
+ ; Example:
299
+ ; endproc MyTestProc
300
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
301
+ %push tmp ; trick: define a dummy context to avoid error in next line
302
+ %macro endproc 0-1 %$proc.name
303
+ %ifndef %$proc.argofs
304
+ %error "`endproc' not in a proc context"
305
+ %elifnidn %$proc.name,%1
306
+ %define %$. %1
307
+ %error "endproc names mismatch: expected `%$proc.name'"
308
+ %error "but got `%$.' instead"
309
+ %elif %$proc.locofs < %$proc.locsize
310
+ %error "unused local space declared (used %$proc.locofs, requested %$proc.locsize)"
311
+ %else
312
+ %$exit:
313
+ ; Now pop the registers that we should restore on exit
314
+ pop %$proc.save
315
+ %if %$proc.locsize != 0
316
+ add esp,%$proc.locsize
317
+ %endif
318
+ ret
319
+ __end_%1:
320
+ %pop
321
+ %endif
322
+ %endmacro
323
+ %pop
324
+
325
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
326
+ ; Summary:
327
+ ; A replacement for "push" for use within procedures
328
+ ; Arguments:
329
+ ; any number of registers which will be push'ed successively
330
+ ; Example:
331
+ ; push eax,ebx,ecx,edx
332
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
333
+ %macro push 0-*
334
+ ; dummy comment to avoid problems with "push" on the same line with a label
335
+ %rep %0
336
+ push %1
337
+ %rotate 1
338
+ %assign .$proc.stkofs .$proc.stkofs+4
339
+ %endrep
340
+ %endmacro
341
+
342
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
343
+ ; Summary:
344
+ ; A replacement for "pop" for use within procedures
345
+ ; Arguments:
346
+ ; any number of registers which will be pop'ed in reverse order
347
+ ; Example:
348
+ ; pop eax,ebx,ecx,edx
349
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
350
+ %macro pop 0-*
351
+ ; dummy comment to avoid problems with "pop" on the same line with a label
352
+ %rep %0
353
+ %rotate -1
354
+ pop %1
355
+ %assign .$proc.stkofs .$proc.stkofs-4
356
+ %endrep
357
+ %endmacro
358
+
359
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
360
+ ; Summary:
361
+ ; Replacements for "pushfd" and "popfd" that takes care of esp
362
+ ; Example:
363
+ ; pushfd
364
+ ; popfd
365
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
366
+ %macro pushfd 0
367
+ pushfd
368
+ %assign .$proc.stkofs .$proc.stkofs+4
369
+ %endmacro
370
+ %macro popfd 0
371
+ popfd
372
+ %assign .$proc.stkofs .$proc.stkofs-4
373
+ %endmacro
374
+
375
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
376
+ ; Summary:
377
+ ; Exit from current procedure (optionally on given condition)
378
+ ; Arguments:
379
+ ; Either none or a condition code
380
+ ; Example:
381
+ ; exit
382
+ ; exit nz
383
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
384
+ %macro exit 0-1 mp
385
+ j%1 near %$exit
386
+ %endmacro
387
+
388
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
389
+ ; Summary:
390
+ ; start an conditional branch
391
+ ; Arguments:
392
+ ; A condition code
393
+ ; second (optional) argument - "short" (by default - "near")
394
+ ; Example:
395
+ ; if nz
396
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
397
+ %macro if 1-2 near
398
+ ; dummy comment to avoid problems with "if" on the same line with a label
399
+ %push if
400
+ j%-1 %2 %$elseif
401
+ %endmacro
402
+
403
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
404
+ ; Summary:
405
+ ; define the "else" branch of a conditional statement
406
+ ; Arguments:
407
+ ; optionaly: "short" if jmp to endif is less than 128 bytes away
408
+ ; Example:
409
+ ; else
410
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
411
+ %macro else 0-1
412
+ %ifnctx if
413
+ %error "`else' without matching `if'"
414
+ %else
415
+ jmp %1 %$endif
416
+ %$elseif:
417
+ %define %$elseif_defined
418
+ %endif
419
+ %endmacro
420
+
421
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
422
+ ; Summary:
423
+ ; Finish am conditional statement
424
+ ; Arguments:
425
+ ; none
426
+ ; Example:
427
+ ; endif
428
+ ;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
429
+ %macro endif 0
430
+ %ifnctx if
431
+ %error "`endif' without matching `if'"
432
+ %else
433
+ %ifndef %$elseif_defined
434
+ %$elseif:
435
+ %endif
436
+ %$endif:
437
+ %pop
438
+ %endif
439
+ %endmacro
440
+
441
+ %endif ; __PROC32_ASH__
@@ -0,0 +1,1223 @@
1
+ ;****************************************************************************
2
+ ;*
3
+ ;* ========================================================================
4
+ ;*
5
+ ;* The contents of this file are subject to the SciTech MGL Public
6
+ ;* License Version 1.0 (the "License"); you may not use this file
7
+ ;* except in compliance with the License. You may obtain a copy of
8
+ ;* the License at http://www.scitechsoft.com/mgl-license.txt
9
+ ;*
10
+ ;* Software distributed under the License is distributed on an
11
+ ;* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
12
+ ;* implied. See the License for the specific language governing
13
+ ;* rights and limitations under the License.
14
+ ;*
15
+ ;* The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.
16
+ ;*
17
+ ;* The Initial Developer of the Original Code is SciTech Software, Inc.
18
+ ;* All Rights Reserved.
19
+ ;*
20
+ ;* ========================================================================
21
+ ;*
22
+ ;* Language: NetWide Assembler (NASM) or Turbo Assembler (TASM)
23
+ ;* Environment: Any Intel Environment
24
+ ;*
25
+ ;* Description: Macros to provide memory model independant assembly language
26
+ ;* module for C programming. Supports the large and flat memory
27
+ ;* models.
28
+ ;*
29
+ ;* The defines that you should use when assembling modules that
30
+ ;* use this macro package are:
31
+ ;*
32
+ ;* __LARGE__ Assemble for 16-bit large model
33
+ ;* __FLAT__ Assemble for 32-bit FLAT memory model
34
+ ;* __NOU__ No underscore for all external C labels
35
+ ;* __NOU_VAR__ No underscore for global variables only
36
+ ;*
37
+ ;* The default settings are for 16-bit large memory model with
38
+ ;* leading underscores for symbol names.
39
+ ;*
40
+ ;* The main intent of the macro file is to enable programmers
41
+ ;* to write _one_ set of source that can be assembled to run
42
+ ;* in either 16 bit real and protected modes or 32 bit
43
+ ;* protected mode without the need to riddle the code with
44
+ ;* 'if flatmodel' style conditional assembly (it is still there
45
+ ;* but nicely hidden by a macro layer that enhances the
46
+ ;* readability and understandability of the resulting code).
47
+ ;*
48
+ ;****************************************************************************
49
+
50
+ ; Include the appropriate version in here depending on the assembler. NASM
51
+ ; appears to always try and parse code, even if it is in a non-compiling
52
+ ; block of a ifdef expression, and hence crashes if we include the TASM
53
+ ; macro package in the same header file. Hence we split the macros up into
54
+ ; two separate header files.
55
+
56
+ ifdef __NASM_MAJOR__
57
+
58
+ ;============================================================================
59
+ ; Macro package when compiling with NASM.
60
+ ;============================================================================
61
+
62
+ ; Turn off underscores for globals if disabled for all externals
63
+
64
+ %ifdef __NOU__
65
+ %define __NOU_VAR__
66
+ %endif
67
+
68
+ ; Define the __WINDOWS__ symbol if we are compiling for any Windows
69
+ ; environment
70
+
71
+ %ifdef __WINDOWS16__
72
+ %define __WINDOWS__ 1
73
+ %endif
74
+ %ifdef __WINDOWS32__
75
+ %define __WINDOWS__ 1
76
+ %define __WINDOWS32_386__ 1
77
+ %endif
78
+
79
+ ; Macros for accessing 'generic' registers
80
+
81
+ %ifdef __FLAT__
82
+ %idefine _ax eax
83
+ %idefine _bx ebx
84
+ %idefine _cx ecx
85
+ %idefine _dx edx
86
+ %idefine _si esi
87
+ %idefine _di edi
88
+ %idefine _bp ebp
89
+ %idefine _sp esp
90
+ %idefine _es
91
+ %idefine UCHAR BYTE ; Size of a character
92
+ %idefine USHORT WORD ; Size of a short
93
+ %idefine UINT DWORD ; Size of an integer
94
+ %idefine ULONG DWORD ; Size of a long
95
+ %idefine BOOL DWORD ; Size of a boolean
96
+ %idefine DPTR DWORD ; Size of a data pointer
97
+ %idefine FDPTR FWORD ; Size of a far data pointer
98
+ %idefine NDPTR DWORD ; Size of a near data pointer
99
+ %idefine CPTR DWORD ; Size of a code pointer
100
+ %idefine FCPTR FWORD ; Size of a far code pointer
101
+ %idefine NCPTR DWORD ; Size of a near code pointer
102
+ %idefine FPTR NEAR ; Distance for function pointers
103
+ %idefine DUINT dd ; Declare a integer variable
104
+ %idefine intsize 4
105
+ %idefine flatmodel 1
106
+ %else
107
+ %idefine _ax ax
108
+ %idefine _bx bx
109
+ %idefine _cx cx
110
+ %idefine _dx dx
111
+ %idefine _si si
112
+ %idefine _di di
113
+ %idefine _bp bp
114
+ %idefine _sp sp
115
+ %idefine _es es:
116
+ %idefine UCHAR BYTE ; Size of a character
117
+ %idefine USHORT WORD ; Size of a short
118
+ %idefine UINT WORD ; Size of an integer
119
+ %idefine ULONG DWORD ; Size of a long
120
+ %idefine BOOL WORD ; Size of a boolean
121
+ %idefine DPTR DWORD ; Size of a data pointer
122
+ %idefine FDPTR DWORD ; Size of a far data pointer
123
+ %idefine NDPTR WORD ; Size of a near data pointer
124
+ %idefine CPTR DWORD ; Size of a code pointer
125
+ %idefine FCPTR DWORD ; Size of a far code pointer
126
+ %idefine NCPTR WORD ; Size of a near code pointer
127
+ %idefine FPTR FAR ; Distance for function pointers
128
+ %idefine DUINT dw ; Declare a integer variable
129
+ %idefine intsize 2
130
+ %endif
131
+ %idefine invert ~
132
+ %idefine offset
133
+ %idefine use_nasm
134
+
135
+ ; Convert all jumps to near jumps, since NASM does not so this automatically
136
+
137
+ %idefine jo jo near
138
+ %idefine jno jno near
139
+ %idefine jz jz near
140
+ %idefine jnz jnz near
141
+ %idefine je je near
142
+ %idefine jne jne near
143
+ %idefine jb jb near
144
+ %idefine jbe jbe near
145
+ %idefine ja ja near
146
+ %idefine jae jae near
147
+ %idefine jl jl near
148
+ %idefine jle jle near
149
+ %idefine jg jg near
150
+ %idefine jge jge near
151
+ %idefine jc jc near
152
+ %idefine jnc jnc near
153
+ %idefine js js near
154
+ %idefine jns jns near
155
+
156
+ %ifdef DOUBLE
157
+ %idefine REAL QWORD
158
+ %idefine DREAL dq
159
+ %else
160
+ %idefine REAL DWORD
161
+ %idefine DREAL dd
162
+ %endif
163
+
164
+ ; Boolean truth values (same as those in debug.h)
165
+
166
+ %idefine False 0
167
+ %idefine True 1
168
+ %idefine No 0
169
+ %idefine Yes 1
170
+ %idefine Yes 1
171
+
172
+ ; Macro to be invoked at the start of all modules to set up segments for
173
+ ; later use. Does nothing for NASM.
174
+
175
+ %imacro header 1
176
+ %endmacro
177
+
178
+ ; Macro to begin a data segment
179
+
180
+ %imacro begdataseg 1
181
+ %ifdef __GNUC__
182
+ segment .data public class=DATA use32 flat
183
+ %else
184
+ %ifdef flatmodel
185
+ segment _DATA public align=4 class=DATA use32 flat
186
+ %else
187
+ segment _DATA public align=4 class=DATA use16
188
+ %endif
189
+ %endif
190
+ %endmacro
191
+
192
+ ; Macro to end a data segment
193
+
194
+ %imacro enddataseg 1
195
+ %endmacro
196
+
197
+ ; Macro to begin a code segment
198
+
199
+ %imacro begcodeseg 1
200
+ %ifdef __GNUC__
201
+ segment .text public class=CODE use32 flat
202
+ %else
203
+ %ifdef flatmodel
204
+ segment _TEXT public align=16 class=CODE use32 flat
205
+ %else
206
+ segment %1_TEXT public align=16 class=CODE use16
207
+ %endif
208
+ %endif
209
+ %endmacro
210
+
211
+ ; Macro to begin a near code segment
212
+
213
+ %imacro begcodeseg_near 0
214
+ %ifdef __GNUC__
215
+ segment .text public class=CODE use32 flat
216
+ %else
217
+ %ifdef flatmodel
218
+ segment _TEXT public align=16 class=CODE use32 flat
219
+ %else
220
+ segment _TEXT public align=16 class=CODE use16
221
+ %endif
222
+ %endif
223
+ %endmacro
224
+
225
+ ; Macro to end a code segment
226
+
227
+ %imacro endcodeseg 1
228
+ %endmacro
229
+
230
+ ; Macro to end a near code segment
231
+
232
+ %imacro endcodeseg_near 0
233
+ %endmacro
234
+
235
+ ; Macro for an extern C symbol. If the C compiler requires leading
236
+ ; underscores, then the underscores are added to the symbol names, otherwise
237
+ ; they are left off. The symbol name is referenced in the assembler code
238
+ ; using the non-underscored symbol name.
239
+
240
+ %imacro cextern 2
241
+ %ifdef __NOU_VAR__
242
+ extern %1
243
+ %else
244
+ extern _%1
245
+ %define %1 _%1
246
+ %endif
247
+ %endmacro
248
+
249
+ %imacro cexternfunc 2
250
+ %ifdef __NOU__
251
+ extern %1
252
+ %else
253
+ extern _%1
254
+ %define %1 _%1
255
+ %endif
256
+ %endmacro
257
+
258
+ ; Macro for a public C symbol. If the C compiler requires leading
259
+ ; underscores, then the underscores are added to the symbol names, otherwise
260
+ ; they are left off. The symbol name is referenced in the assembler code
261
+ ; using the non-underscored symbol name.
262
+
263
+ %imacro cpublic 1
264
+ %ifdef __NOU_VAR__
265
+ global %1
266
+ %1:
267
+ %else
268
+ global _%1
269
+ _%1:
270
+ %define %1 _%1
271
+ %endif
272
+ %endmacro
273
+
274
+ ; Macro for an global C symbol. If the C compiler requires leading
275
+ ; underscores, then the underscores are added to the symbol names, otherwise
276
+ ; they are left off. The symbol name is referenced in the assembler code
277
+ ; using the non-underscored symbol name.
278
+
279
+ %imacro cglobal 1
280
+ %ifdef __NOU_VAR__
281
+ global %1
282
+ %else
283
+ global _%1
284
+ %define %1 _%1
285
+ %endif
286
+ %endmacro
287
+
288
+ ; Macro for an global C function symbol. If the C compiler requires leading
289
+ ; underscores, then the underscores are added to the symbol names, otherwise
290
+ ; they are left off. The symbol name is referenced in the assembler code
291
+ ; using the non-underscored symbol name.
292
+
293
+ %imacro cglobalfunc 1
294
+ %ifdef __NOU__
295
+ global %1
296
+ %else
297
+ global _%1
298
+ %define %1 _%1
299
+ %endif
300
+ %endmacro
301
+
302
+ ; Macro to start a C callable function. This will be a far function for
303
+ ; 16-bit code, and a near function for 32-bit code.
304
+
305
+ %imacro cprocstatic 1
306
+ %push cproc
307
+ %1:
308
+ %ifdef flatmodel
309
+ %stacksize flat
310
+ %define ret retn
311
+ %else
312
+ %stacksize large
313
+ %define ret retf
314
+ %endif
315
+ %assign %$localsize 0
316
+ %endmacro
317
+
318
+ %imacro cprocstart 1
319
+ %push cproc
320
+ cglobalfunc %1
321
+ %1:
322
+ %ifdef flatmodel
323
+ %stacksize flat
324
+ %define ret retn
325
+ %else
326
+ %stacksize large
327
+ %define ret retf
328
+ %endif
329
+ %assign %$localsize 0
330
+ %endmacro
331
+
332
+ ; This macro sets up a procedure to be exported from a 16 bit DLL. Since the
333
+ ; calling conventions are always _far _pascal for 16 bit DLL's, we actually
334
+ ; rename this routine with an extra underscore with 'C' calling conventions
335
+ ; and a small DLL stub will be provided by the high level code to call the
336
+ ; assembler routine.
337
+
338
+ %imacro cprocstartdll16 1
339
+ %ifdef __WINDOWS16__
340
+ cprocstart _%1
341
+ %else
342
+ cprocstart %1
343
+ %endif
344
+ %endmacro
345
+
346
+ ; Macro to start a C callable near function.
347
+
348
+ %imacro cprocnear 1
349
+ %push cproc
350
+ cglobalfunc %1
351
+ %1:
352
+ %define ret retn
353
+ %ifdef flatmodel
354
+ %stacksize flat
355
+ %else
356
+ %stacksize small
357
+ %endif
358
+ %assign %$localsize 0
359
+ %endmacro
360
+
361
+ ; Macro to start a C callable far function.
362
+
363
+ %imacro cprocfar 1
364
+ %push cproc
365
+ cglobalfunc %1
366
+ %1:
367
+ %define ret retf
368
+ %ifdef flatmodel
369
+ %stacksize flat
370
+ %else
371
+ %stacksize large
372
+ %endif
373
+ %assign %$localsize 0
374
+ %endmacro
375
+
376
+ ; Macro to end a C function
377
+
378
+ %imacro cprocend 0
379
+ %pop
380
+ %endmacro
381
+
382
+ ; Macros for entering and exiting C callable functions. Note that we must
383
+ ; always save and restore the SI and DI registers for C functions, and for
384
+ ; 32 bit C functions we also need to save and restore EBX and clear the
385
+ ; direction flag.
386
+
387
+ %imacro enter_c 0
388
+ push _bp
389
+ mov _bp,_sp
390
+ %ifnidn %$localsize,0
391
+ sub _sp,%$localsize
392
+ %endif
393
+ %ifdef flatmodel
394
+ push ebx
395
+ %endif
396
+ push _si
397
+ push _di
398
+ %endmacro
399
+
400
+ %imacro leave_c 0
401
+ pop _di
402
+ pop _si
403
+ %ifdef flatmodel
404
+ pop ebx
405
+ cld
406
+ %endif
407
+ %ifnidn %$localsize,0
408
+ mov _sp,_bp
409
+ %endif
410
+ pop _bp
411
+ %endmacro
412
+
413
+ %imacro use_ebx 0
414
+ %ifdef flatmodel
415
+ push ebx
416
+ %endif
417
+ %endmacro
418
+
419
+ %imacro unuse_ebx 0
420
+ %ifdef flatmodel
421
+ pop ebx
422
+ %endif
423
+ %endmacro
424
+
425
+ ; Macros for saving and restoring the value of DS,ES,FS,GS when it is to
426
+ ; be used in assembly routines. This evaluates to nothing in the flat memory
427
+ ; model, but is saves and restores DS in the large memory model.
428
+
429
+ %imacro use_ds 0
430
+ %ifndef flatmodel
431
+ push ds
432
+ %endif
433
+ %endmacro
434
+
435
+ %imacro unuse_ds 0
436
+ %ifndef flatmodel
437
+ pop ds
438
+ %endif
439
+ %endmacro
440
+
441
+ %imacro use_es 0
442
+ %ifndef flatmodel
443
+ push es
444
+ %endif
445
+ %endmacro
446
+
447
+ %imacro unuse_es 0
448
+ %ifndef flatmodel
449
+ pop es
450
+ %endif
451
+ %endmacro
452
+
453
+ ; Macros for loading the address of a data pointer into a segment and
454
+ ; index register pair. The %imacro explicitly loads DS or ES in the 16 bit
455
+ ; memory model, or it simply loads the offset into the register in the flat
456
+ ; memory model since DS and ES always point to all addressable memory. You
457
+ ; must use the correct _REG (ie: _BX) %imacros for documentation purposes.
458
+
459
+ %imacro _lds 2
460
+ %ifdef flatmodel
461
+ mov %1,%2
462
+ %else
463
+ lds %1,%2
464
+ %endif
465
+ %endmacro
466
+
467
+ %imacro _les 2
468
+ %ifdef flatmodel
469
+ mov %1,%2
470
+ %else
471
+ les %1,%2
472
+ %endif
473
+ %endmacro
474
+
475
+ ; Macros for adding and subtracting a value from registers. Two value are
476
+ ; provided, one for 16 bit modes and another for 32 bit modes (the extended
477
+ ; register is used in 32 bit modes).
478
+
479
+ %imacro _add 3
480
+ %ifdef flatmodel
481
+ add e%1, %3
482
+ %else
483
+ add %1, %2
484
+ %endif
485
+ %endmacro
486
+
487
+ %imacro _sub 3
488
+ %ifdef flatmodel
489
+ sub e%1, %3
490
+ %else
491
+ sub %1, %2
492
+ %endif
493
+ %endmacro
494
+
495
+ ; Macro to clear the high order word for the 32 bit extended registers.
496
+ ; This is used to convert an unsigned 16 bit value to an unsigned 32 bit
497
+ ; value, and will evaluate to nothing in 16 bit modes.
498
+
499
+ %imacro clrhi 1
500
+ %ifdef flatmodel
501
+ movzx e%1,%1
502
+ %endif
503
+ %endmacro
504
+
505
+ %imacro sgnhi 1
506
+ %ifdef flatmodel
507
+ movsx e%1,%1
508
+ %endif
509
+ %endmacro
510
+
511
+ ; Macro to load an extended register with an integer value in either mode
512
+
513
+ %imacro loadint 2
514
+ %ifdef flatmodel
515
+ mov e%1,%2
516
+ %else
517
+ xor e%1,e%1
518
+ mov %1,%2
519
+ %endif
520
+ %endmacro
521
+
522
+ ; Macros to load and store integer values with string instructions
523
+
524
+ %imacro LODSINT 0
525
+ %ifdef flatmodel
526
+ lodsd
527
+ %else
528
+ lodsw
529
+ %endif
530
+ %endmacro
531
+
532
+ %imacro STOSINT 0
533
+ %ifdef flatmodel
534
+ stosd
535
+ %else
536
+ stosw
537
+ %endif
538
+ %endmacro
539
+
540
+ ; Macros to provide resb, resw, resd compatibility with NASM
541
+
542
+ %imacro dclb 1
543
+ times %1 db 0
544
+ %endmacro
545
+
546
+ %imacro dclw 1
547
+ times %1 dw 0
548
+ %endmacro
549
+
550
+ %imacro dcld 1
551
+ times %1 dd 0
552
+ %endmacro
553
+
554
+ ; macros to declare assembler function stubs for function structures
555
+
556
+ %imacro BEGIN_STUBS_DEF 2
557
+ begdataseg _STUBS
558
+ %ifdef __NOU_VAR__
559
+ extern %1
560
+ %define STUBS_START %1
561
+ %else
562
+ extern _%1
563
+ %define STUBS_START _%1
564
+ %endif
565
+ enddataseg _STUBS
566
+ begcodeseg _STUBS
567
+ %assign off %2
568
+ %endmacro
569
+
570
+ %imacro DECLARE_STUB 1
571
+ %ifdef __NOU__
572
+ global %1
573
+ %1:
574
+ %else
575
+ global _%1
576
+ _%1:
577
+ %endif
578
+ jmp [DWORD STUBS_START+off]
579
+ %assign off off+4
580
+ %endmacro
581
+
582
+ %imacro DECLARE_STDCALL 2
583
+ %ifdef STDCALL_MANGLE
584
+ global _%1@%2
585
+ _%1@%2:
586
+ %else
587
+ %ifdef __GNUC__
588
+ global _%1
589
+ _%1:
590
+ %else
591
+ global %1
592
+ %1:
593
+ %endif
594
+ %endif
595
+ jmp [DWORD STUBS_START+off]
596
+ %assign off off+4
597
+ %endmacro
598
+
599
+ %imacro END_STUBS_DEF 0
600
+ endcodeseg _STUBS
601
+ %endmacro
602
+
603
+ ; macros to declare assembler import stubs for binary loadable drivers
604
+
605
+ %imacro BEGIN_IMPORTS_DEF 1
606
+ BEGIN_STUBS_DEF %1,4
607
+ %endmacro
608
+
609
+ %imacro DECLARE_IMP 1
610
+ DECLARE_STUB %1
611
+ %endmacro
612
+
613
+ %imacro END_IMPORTS_DEF 0
614
+ END_STUBS_DEF
615
+ %endmacro
616
+
617
+ else ; __NASM_MAJOR__
618
+
619
+ ;============================================================================
620
+ ; Macro package when compiling with TASM.
621
+ ;============================================================================
622
+
623
+ ; Turn off underscores for globals if disabled for all externals
624
+
625
+ ifdef __NOU__
626
+ __NOU_VAR__ = 1
627
+ endif
628
+
629
+ ; Define the __WINDOWS__ symbol if we are compiling for any Windows
630
+ ; environment
631
+
632
+ ifdef __WINDOWS16__
633
+ __WINDOWS__ = 1
634
+ endif
635
+ ifdef __WINDOWS32__
636
+ __WINDOWS__ = 1
637
+ __WINDOWS32_386__ = 1
638
+ endif
639
+ ifdef __WIN386__
640
+ __WINDOWS__ = 1
641
+ __WINDOWS32_386__ = 1
642
+ endif
643
+ ifdef __VXD__
644
+ __WINDOWS__ = 1
645
+ __WINDOWS32_386__ = 1
646
+ MASM
647
+ .386
648
+ NO_SEGMENTS = 1
649
+ include vmm.inc ; IGNORE DEPEND
650
+ include vsegment.inc ; IGNORE DEPEND
651
+ IDEAL
652
+ endif
653
+
654
+ ; Macros for accessing 'generic' registers
655
+
656
+ ifdef __FLAT__
657
+ _ax EQU eax ; EAX is used for accumulator
658
+ _bx EQU ebx ; EBX is used for accumulator
659
+ _cx EQU ecx ; ECX is used for looping
660
+ _dx EQU edx ; EDX is used for data register
661
+ _si EQU esi ; ESI is the source index register
662
+ _di EQU edi ; EDI is the destination index register
663
+ _bp EQU ebp ; EBP is used for base pointer register
664
+ _sp EQU esp ; ESP is used for stack pointer register
665
+ _es EQU ; ES and DS are the same in 32 bit PM
666
+ typedef UCHAR BYTE ; Size of a character
667
+ typedef USHORT WORD ; Size of a short
668
+ typedef UINT DWORD ; Size of an integer
669
+ typedef ULONG DWORD ; Size of a long
670
+ typedef BOOL DWORD ; Size of a boolean
671
+ typedef DPTR DWORD ; Size of a data pointer
672
+ typedef FDPTR FWORD ; Size of a far data pointer
673
+ typedef NDPTR DWORD ; Size of a near data pointer
674
+ typedef CPTR DWORD ; Size of a code pointer
675
+ typedef FCPTR FWORD ; Size of a far code pointer
676
+ typedef NCPTR DWORD ; Size of a near code pointer
677
+ typedef DUINT DWORD ; Declare a integer variable
678
+ FPTR EQU NEAR ; Distance for function pointers
679
+ intsize = 4 ; Size of an integer
680
+ flatmodel = 1 ; This is a flat memory model
681
+ P386 ; Turn on 386 code generation
682
+ MODEL FLAT ; Set up for 32 bit simplified FLAT model
683
+ else
684
+ _ax EQU ax ; AX is used for accumulator
685
+ _bx EQU bx ; BX is used for accumulator
686
+ _cx EQU cx ; CX is used for looping
687
+ _dx EQU dx ; DX is used for data register
688
+ _si EQU si ; SI is the source index register
689
+ _di EQU di ; DI is the destination index register
690
+ _bp EQU bp ; BP is used for base pointer register
691
+ _sp EQU sp ; SP is used for stack pointer register
692
+ _es EQU es: ; ES is used for segment override
693
+ typedef UCHAR BYTE ; Size of a character
694
+ typedef USHORT WORD ; Size of a short
695
+ typedef UINT WORD ; Size of an integer
696
+ typedef ULONG DWORD ; Size of a long
697
+ typedef BOOL WORD ; Size of a boolean
698
+ typedef DPTR DWORD ; Size of a data pointer
699
+ typedef FDPTR DWORD ; Size of a far data pointer
700
+ typedef NDPTR WORD ; Size of a near data pointer
701
+ typedef CPTR DWORD ; Size of a code pointer
702
+ typedef FCPTR DWORD ; Size of a far code pointer
703
+ typedef NCPTR WORD ; Size of a near code pointer
704
+ typedef DUINT WORD ; Declare a integer variable
705
+ FPTR EQU FAR ; Distance for function pointers
706
+ intsize = 2 ; Size of an integer
707
+ P386 ; Turn on 386 code generation
708
+ endif
709
+ invert EQU not
710
+
711
+ ; Provide a typedef for real floating point numbers
712
+
713
+ ifdef DOUBLE
714
+ typedef REAL QWORD
715
+ typedef DREAL QWORD
716
+ else
717
+ typedef REAL DWORD
718
+ typedef DREAL DWORD
719
+ endif
720
+
721
+ ; Macros to access the floating point stack registers to convert them
722
+ ; from NASM style to TASM style
723
+
724
+ st0 EQU st(0)
725
+ st1 EQU st(1)
726
+ st2 EQU st(2)
727
+ st3 EQU st(3)
728
+ st4 EQU st(4)
729
+ st5 EQU st(5)
730
+ st6 EQU st(6)
731
+ st7 EQU st(7)
732
+ st8 EQU st(8)
733
+
734
+ ; Boolean truth values (same as those in debug.h)
735
+
736
+ ifndef __VXD__
737
+ False = 0
738
+ True = 1
739
+ No = 0
740
+ Yes = 1
741
+ Yes = 1
742
+ endif
743
+
744
+ ; Macros for the _DATA data segment. This segment contains initialised data.
745
+
746
+ MACRO begdataseg name
747
+ ifdef __VXD__
748
+ MASM
749
+ VXD_LOCKED_DATA_SEG
750
+ IDEAL
751
+ else
752
+ ifdef flatmodel
753
+ DATASEG
754
+ else
755
+ SEGMENT _DATA DWORD PUBLIC USE16 'DATA'
756
+ endif
757
+ endif
758
+ ENDM
759
+
760
+ MACRO enddataseg name
761
+ ifdef __VXD__
762
+ MASM
763
+ VXD_LOCKED_DATA_ENDS
764
+ IDEAL
765
+ else
766
+ ifndef flatmodel
767
+ ENDS _DATA
768
+ endif
769
+ endif
770
+ ENDM
771
+
772
+ ; Macro for the main code segment.
773
+
774
+ MACRO begcodeseg name
775
+ ifdef __VXD__
776
+ MASM
777
+ VXD_LOCKED_CODE_SEG
778
+ IDEAL
779
+ else
780
+ ifdef flatmodel
781
+ CODESEG
782
+ ASSUME CS:FLAT,DS:FLAT,SS:FLAT
783
+ else
784
+ SEGMENT &name&_TEXT PARA PUBLIC USE16 'CODE'
785
+ ASSUME CS:&name&_TEXT,DS:_DATA
786
+ endif
787
+ endif
788
+ ENDM
789
+
790
+ ; Macro for a near code segment
791
+
792
+ MACRO begcodeseg_near
793
+ ifdef flatmodel
794
+ CODESEG
795
+ ASSUME CS:FLAT,DS:FLAT,SS:FLAT
796
+ else
797
+ SEGMENT _TEXT PARA PUBLIC USE16 'CODE'
798
+ ASSUME CS:_TEXT,DS:_DATA
799
+ endif
800
+ ENDM
801
+
802
+ MACRO endcodeseg name
803
+ ifdef __VXD__
804
+ MASM
805
+ VXD_LOCKED_CODE_ENDS
806
+ IDEAL
807
+ else
808
+ ifndef flatmodel
809
+ ENDS &name&_TEXT
810
+ endif
811
+ endif
812
+ ENDM
813
+
814
+ MACRO endcodeseg_near
815
+ ifndef flatmodel
816
+ ENDS _TEXT
817
+ endif
818
+ ENDM
819
+
820
+ ; Macro to be invoked at the start of all modules to set up segments for
821
+ ; later use.
822
+
823
+ MACRO header name
824
+ begdataseg name
825
+ enddataseg name
826
+ ENDM
827
+
828
+ ; Macro for an extern C symbol. If the C compiler requires leading
829
+ ; underscores, then the underscores are added to the symbol names, otherwise
830
+ ; they are left off. The symbol name is referenced in the assembler code
831
+ ; using the non-underscored symbol name.
832
+
833
+ MACRO cextern name,size
834
+ ifdef __NOU_VAR__
835
+ EXTRN name:size
836
+ else
837
+ EXTRN _&name&:size
838
+ name EQU _&name&
839
+ endif
840
+ ENDM
841
+
842
+ MACRO cexternfunc name,size
843
+ ifdef __NOU__
844
+ EXTRN name:size
845
+ else
846
+ EXTRN _&name&:size
847
+ name EQU _&name&
848
+ endif
849
+ ENDM
850
+
851
+ MACRO stdexternfunc name,args,size
852
+ ifdef STDCALL_MANGLE
853
+ EXTRN _&name&@&num_args&:size
854
+ name EQU _&name&@&num_args
855
+ else
856
+ EXTRN name:size
857
+ endif
858
+ ENDM
859
+
860
+ ; Macro for a public C symbol. If the C compiler requires leading
861
+ ; underscores, then the underscores are added to the symbol names, otherwise
862
+ ; they are left off. The symbol name is referenced in the assembler code
863
+ ; using the non-underscored symbol name.
864
+
865
+ MACRO cpublic name
866
+ ifdef __NOU_VAR__
867
+ name:
868
+ PUBLIC name
869
+ else
870
+ _&name&:
871
+ PUBLIC _&name&
872
+ name EQU _&name&
873
+ endif
874
+ ENDM
875
+
876
+ ; Macro for an global C symbol. If the C compiler requires leading
877
+ ; underscores, then the underscores are added to the symbol names, otherwise
878
+ ; they are left off. The symbol name is referenced in the assembler code
879
+ ; using the non-underscored symbol name.
880
+
881
+ MACRO cglobal name
882
+ ifdef __NOU_VAR__
883
+ PUBLIC name
884
+ else
885
+ PUBLIC _&name&
886
+ name EQU _&name&
887
+ endif
888
+ ENDM
889
+
890
+ ; Macro for an global C function symbol. If the C compiler requires leading
891
+ ; underscores, then the underscores are added to the symbol names, otherwise
892
+ ; they are left off. The symbol name is referenced in the assembler code
893
+ ; using the non-underscored symbol name.
894
+
895
+ MACRO cglobalfunc name
896
+ ifdef __NOU__
897
+ PUBLIC name
898
+ else
899
+ PUBLIC _&name&
900
+ name EQU _&name&
901
+ endif
902
+ ENDM
903
+
904
+ ; Macro to start a C callable function. This will be a far function for
905
+ ; 16-bit code, and a near function for 32-bit code.
906
+
907
+ MACRO cprocstatic name ; Set up model independant private proc
908
+ ifdef flatmodel
909
+ PROC name NEAR
910
+ else
911
+ PROC name FAR
912
+ endif
913
+ LocalSize = 0
914
+ ENDM
915
+
916
+ MACRO cprocstart name ; Set up model independant proc
917
+ ifdef flatmodel
918
+ ifdef __NOU__
919
+ PROC name NEAR
920
+ else
921
+ PROC _&name& NEAR
922
+ endif
923
+ else
924
+ ifdef __NOU__
925
+ PROC name FAR
926
+ else
927
+ PROC _&name& FAR
928
+ endif
929
+ endif
930
+ LocalSize = 0
931
+ cglobalfunc name
932
+ ENDM
933
+
934
+ MACRO cprocnear name ; Set up near proc
935
+ ifdef __NOU__
936
+ PROC name NEAR
937
+ else
938
+ PROC _&name& NEAR
939
+ endif
940
+ LocalSize = 0
941
+ cglobalfunc name
942
+ ENDM
943
+
944
+ MACRO cprocfar name ; Set up far proc
945
+ ifdef __NOU__
946
+ PROC name FAR
947
+ else
948
+ PROC _&name& FAR
949
+ endif
950
+ LocalSize = 0
951
+ cglobalfunc name
952
+ ENDM
953
+
954
+ MACRO cprocend ; End procedure macro
955
+ ENDP
956
+ ENDM
957
+
958
+ ; This macro sets up a procedure to be exported from a 16 bit DLL. Since the
959
+ ; calling conventions are always _far _pascal for 16 bit DLL's, we actually
960
+ ; rename this routine with an extra underscore with 'C' calling conventions
961
+ ; and a small DLL stub will be provided by the high level code to call the
962
+ ; assembler routine.
963
+
964
+ MACRO cprocstartdll16 name
965
+ ifdef __WINDOWS16__
966
+ cprocstart _&name&
967
+ else
968
+ cprocstart name
969
+ endif
970
+ ENDM
971
+
972
+ ; Macros for entering and exiting C callable functions. Note that we must
973
+ ; always save and restore the SI and DI registers for C functions, and for
974
+ ; 32 bit C functions we also need to save and restore EBX and clear the
975
+ ; direction flag.
976
+
977
+ MACRO save_c_regs
978
+ ifdef flatmodel
979
+ push ebx
980
+ endif
981
+ push _si
982
+ push _di
983
+ ENDM
984
+
985
+ MACRO enter_c
986
+ push _bp
987
+ mov _bp,_sp
988
+ IFDIFI <LocalSize>,<0>
989
+ sub _sp,LocalSize
990
+ ENDIF
991
+ save_c_regs
992
+ ENDM
993
+
994
+ MACRO restore_c_regs
995
+ pop _di
996
+ pop _si
997
+ ifdef flatmodel
998
+ pop ebx
999
+ endif
1000
+ ENDM
1001
+
1002
+ MACRO leave_c
1003
+ restore_c_regs
1004
+ cld
1005
+ IFDIFI <LocalSize>,<0>
1006
+ mov _sp,_bp
1007
+ ENDIF
1008
+ pop _bp
1009
+ ENDM
1010
+
1011
+ MACRO use_ebx
1012
+ ifdef flatmodel
1013
+ push ebx
1014
+ endif
1015
+ ENDM
1016
+
1017
+ MACRO unuse_ebx
1018
+ ifdef flatmodel
1019
+ pop ebx
1020
+ endif
1021
+ ENDM
1022
+
1023
+ ; Macros for saving and restoring the value of DS,ES,FS,GS when it is to
1024
+ ; be used in assembly routines. This evaluates to nothing in the flat memory
1025
+ ; model, but is saves and restores DS in the large memory model.
1026
+
1027
+ MACRO use_ds
1028
+ ifndef flatmodel
1029
+ push ds
1030
+ endif
1031
+ ENDM
1032
+
1033
+ MACRO unuse_ds
1034
+ ifndef flatmodel
1035
+ pop ds
1036
+ endif
1037
+ ENDM
1038
+
1039
+ MACRO use_es
1040
+ ifndef flatmodel
1041
+ push es
1042
+ endif
1043
+ ENDM
1044
+
1045
+ MACRO unuse_es
1046
+ ifndef flatmodel
1047
+ pop es
1048
+ endif
1049
+ ENDM
1050
+
1051
+ ; Macros for loading the address of a data pointer into a segment and
1052
+ ; index register pair. The macro explicitly loads DS or ES in the 16 bit
1053
+ ; memory model, or it simply loads the offset into the register in the flat
1054
+ ; memory model since DS and ES always point to all addressable memory. You
1055
+ ; must use the correct _REG (ie: _BX) macros for documentation purposes.
1056
+
1057
+ MACRO _lds reg, addr
1058
+ ifdef flatmodel
1059
+ mov reg,addr
1060
+ else
1061
+ lds reg,addr
1062
+ endif
1063
+ ENDM
1064
+
1065
+ MACRO _les reg, addr
1066
+ ifdef flatmodel
1067
+ mov reg,addr
1068
+ else
1069
+ les reg,addr
1070
+ endif
1071
+ ENDM
1072
+
1073
+ ; Macros for adding and subtracting a value from registers. Two value are
1074
+ ; provided, one for 16 bit modes and another for 32 bit modes (the extended
1075
+ ; register is used in 32 bit modes).
1076
+
1077
+ MACRO _add reg, val16, val32
1078
+ ifdef flatmodel
1079
+ add e&reg&, val32
1080
+ else
1081
+ add reg, val16
1082
+ endif
1083
+ ENDM
1084
+
1085
+ MACRO _sub reg, val16, val32
1086
+ ifdef flatmodel
1087
+ sub e&reg&, val32
1088
+ else
1089
+ sub reg, val16
1090
+ endif
1091
+ ENDM
1092
+
1093
+ ; Macro to clear the high order word for the 32 bit extended registers.
1094
+ ; This is used to convert an unsigned 16 bit value to an unsigned 32 bit
1095
+ ; value, and will evaluate to nothing in 16 bit modes.
1096
+
1097
+ MACRO clrhi reg
1098
+ ifdef flatmodel
1099
+ movzx e&reg&,reg
1100
+ endif
1101
+ ENDM
1102
+
1103
+ MACRO sgnhi reg
1104
+ ifdef flatmodel
1105
+ movsx e&reg&,reg
1106
+ endif
1107
+ ENDM
1108
+
1109
+ ; Macro to load an extended register with an integer value in either mode
1110
+
1111
+ MACRO loadint reg,val
1112
+ ifdef flatmodel
1113
+ mov e&reg&,val
1114
+ else
1115
+ xor e&reg&,e&reg&
1116
+ mov reg,val
1117
+ endif
1118
+ ENDM
1119
+
1120
+ ; Macros to load and store integer values with string instructions
1121
+
1122
+ MACRO LODSINT
1123
+ ifdef flatmodel
1124
+ lodsd
1125
+ else
1126
+ lodsw
1127
+ endif
1128
+ ENDM
1129
+
1130
+ MACRO STOSINT
1131
+ ifdef flatmodel
1132
+ stosd
1133
+ else
1134
+ stosw
1135
+ endif
1136
+ ENDM
1137
+
1138
+ ; Macros to provide resb, resw, resd compatibility with NASM
1139
+
1140
+ MACRO dclb count
1141
+ db count dup (0)
1142
+ ENDM
1143
+
1144
+ MACRO dclw count
1145
+ dw count dup (0)
1146
+ ENDM
1147
+
1148
+ MACRO dcld count
1149
+ dd count dup (0)
1150
+ ENDM
1151
+
1152
+ ; Macros to provide resb, resw, resd compatibility with NASM
1153
+
1154
+ MACRO resb count
1155
+ db count dup (?)
1156
+ ENDM
1157
+
1158
+ MACRO resw count
1159
+ dw count dup (?)
1160
+ ENDM
1161
+
1162
+ MACRO resd count
1163
+ dd count dup (?)
1164
+ ENDM
1165
+
1166
+ ; Macros to declare assembler stubs for function structures
1167
+
1168
+ MACRO BEGIN_STUBS_DEF name, firstOffset
1169
+ begdataseg _STUBS
1170
+ ifdef __NOU_VAR__
1171
+ EXTRN name:DWORD
1172
+ STUBS_START = name
1173
+ else
1174
+ EXTRN _&name&:DWORD
1175
+ name EQU _&name&
1176
+ STUBS_START = _&name
1177
+ endif
1178
+ enddataseg _STUBS
1179
+ begcodeseg _STUBS
1180
+ off = firstOffset
1181
+ ENDM
1182
+
1183
+ MACRO DECLARE_STUB name
1184
+ ifdef __NOU__
1185
+ name:
1186
+ PUBLIC name
1187
+ else
1188
+ _&name:
1189
+ PUBLIC _&name
1190
+ endif
1191
+ jmp [DWORD STUBS_START+off]
1192
+ off = off + 4
1193
+ ENDM
1194
+
1195
+ MACRO DECLARE_STDCALL name,num_args
1196
+ ifdef STDCALL_MANGLE
1197
+ _&name&@&num_args&:
1198
+ PUBLIC _&name&@&num_args&
1199
+ else
1200
+ name:
1201
+ PUBLIC name
1202
+ endif
1203
+ jmp [DWORD STUBS_START+off]
1204
+ off = off + 4
1205
+ ENDM
1206
+
1207
+ MACRO END_STUBS_DEF
1208
+ endcodeseg _STUBS
1209
+ ENDM
1210
+
1211
+ MACRO BEGIN_IMPORTS_DEF name
1212
+ BEGIN_STUBS_DEF name,4
1213
+ ENDM
1214
+
1215
+ MACRO DECLARE_IMP name
1216
+ DECLARE_STUB name
1217
+ ENDM
1218
+
1219
+ MACRO END_IMPORTS_DEF
1220
+ END_STUBS_DEF
1221
+ ENDM
1222
+
1223
+ endif