const.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  1. "use strict";
  2. var
  3. /** @const */ LOG_ALL = -1,
  4. /** @const */ LOG_NONE = 0,
  5. /** @const */ LOG_OTHER = 0x000001,
  6. /** @const */ LOG_CPU = 0x000002,
  7. /** @const */ LOG_FPU = 0x000004,
  8. /** @const */ LOG_MEM = 0x000008,
  9. /** @const */ LOG_DMA = 0x000010,
  10. /** @const */ LOG_IO = 0x000020,
  11. /** @const */ LOG_PS2 = 0x000040,
  12. /** @const */ LOG_PIC = 0x000080,
  13. /** @const */ LOG_VGA = 0x000100,
  14. /** @const */ LOG_PIT = 0x000200,
  15. /** @const */ LOG_MOUSE = 0x000400,
  16. /** @const */ LOG_PCI = 0x000800,
  17. /** @const */ LOG_BIOS = 0x001000,
  18. /** @const */ LOG_FLOPPY = 0x002000,
  19. /** @const */ LOG_SERIAL = 0x004000,
  20. /** @const */ LOG_DISK = 0x008000,
  21. /** @const */ LOG_RTC = 0x010000,
  22. /** @const */ LOG_HPET = 0x020000,
  23. /** @const */ LOG_ACPI = 0x040000,
  24. /** @const */ LOG_APIC = 0x080000,
  25. /** @const */ LOG_NET = 0x100000,
  26. /** @const */ LOG_VIRTIO = 0x200000,
  27. /** @const */ LOG_9P = 0x400000;
  28. /**
  29. * @const
  30. * @type {Array<Array<string|number>>}
  31. */
  32. var LOG_NAMES = [
  33. [1, ""],
  34. [LOG_CPU, "CPU"],
  35. [LOG_DISK, "DISK"],
  36. [LOG_FPU, "FPU"],
  37. [LOG_MEM, "MEM"],
  38. [LOG_DMA, "DMA"],
  39. [LOG_IO, "IO"],
  40. [LOG_PS2, "PS2"],
  41. [LOG_PIC, "PIC"],
  42. [LOG_VGA, "VGA"],
  43. [LOG_PIT, "PIT"],
  44. [LOG_MOUSE, "MOUS"],
  45. [LOG_PCI, "PCI"],
  46. [LOG_BIOS, "BIOS"],
  47. [LOG_FLOPPY, "FLOP"],
  48. [LOG_SERIAL, "SERI"],
  49. [LOG_RTC, "RTC"],
  50. [LOG_HPET, "HPET"],
  51. [LOG_ACPI, "ACPI"],
  52. [LOG_APIC, "APIC"],
  53. [LOG_NET, "NET"],
  54. [LOG_VIRTIO, "VIO"],
  55. [LOG_9P, "9P"],
  56. ];
  57. var
  58. // flags register bitflags
  59. /** @const */ flag_carry = 1,
  60. /** @const */ flag_parity = 4,
  61. /** @const */ flag_adjust = 16,
  62. /** @const */ flag_zero = 64,
  63. /** @const */ flag_sign = 128,
  64. /** @const */ flag_trap = 256,
  65. /** @const */ flag_interrupt = 512,
  66. /** @const */ flag_direction = 1024,
  67. /** @const */ flag_overflow = 2048,
  68. /** @const */ flag_iopl = 1 << 12 | 1 << 13,
  69. /** @const */ flag_nt = 1 << 14,
  70. /** @const */ flag_rf = 1 << 16,
  71. /** @const */ flag_vm = 1 << 17,
  72. /** @const */ flag_ac = 1 << 18,
  73. /** @const */ flag_vif = 1 << 19,
  74. /** @const */ flag_vip = 1 << 20,
  75. /** @const */ flag_id = 1 << 21,
  76. /**
  77. * default values of reserved flags bits
  78. * @const
  79. */
  80. flags_default = 1 << 1,
  81. /**
  82. * bitmask to select non-reserved flags bits
  83. * @const
  84. */
  85. flags_mask =
  86. flag_carry | flag_parity | flag_adjust | flag_zero | flag_sign | flag_trap | flag_interrupt |
  87. flag_direction | flag_overflow | flag_iopl | flag_nt | flag_rf | flag_vm | flag_ac |
  88. flag_vif | flag_vip | flag_id,
  89. /**
  90. * all arithmetic flags
  91. * @const
  92. */
  93. flags_all = flag_carry | flag_parity | flag_adjust | flag_zero | flag_sign | flag_overflow,
  94. /**
  95. * opsizes used by get flag functions
  96. *
  97. * @const
  98. */
  99. OPSIZE_8 = 7,
  100. /** @const */
  101. OPSIZE_16 = 15,
  102. /** @const */
  103. OPSIZE_32 = 31,
  104. /** @const */
  105. PSE_ENABLED = 128,
  106. /** @const */ reg_eax = 0,
  107. /** @const */ reg_ecx = 1,
  108. /** @const */ reg_edx = 2,
  109. /** @const */ reg_ebx = 3,
  110. /** @const */ reg_esp = 4,
  111. /** @const */ reg_ebp = 5,
  112. /** @const */ reg_esi = 6,
  113. /** @const */ reg_edi = 7,
  114. /** @const */ reg_ax = 0,
  115. /** @const */ reg_cx = 2,
  116. /** @const */ reg_dx = 4,
  117. /** @const */ reg_bx = 6,
  118. /** @const */ reg_sp = 8,
  119. /** @const */ reg_bp = 10,
  120. /** @const */ reg_si = 12,
  121. /** @const */ reg_di = 14,
  122. /** @const */ reg_al = 0,
  123. /** @const */ reg_cl = 4,
  124. /** @const */ reg_dl = 8,
  125. /** @const */ reg_bl = 12,
  126. /** @const */ reg_ah = 1,
  127. /** @const */ reg_ch = 5,
  128. /** @const */ reg_dh = 9,
  129. /** @const */ reg_bh = 13,
  130. /** @const */ reg_es = 0,
  131. /** @const */ reg_cs = 1,
  132. /** @const */ reg_ss = 2,
  133. /** @const */ reg_ds = 3,
  134. /** @const */ reg_fs = 4,
  135. /** @const */ reg_gs = 5,
  136. /** @const */ reg_tr = 6, // task register
  137. /** @const */ reg_ldtr = 7; // local descriptor table register
  138. var
  139. /**
  140. * The minimum number of bytes that can be memory-mapped
  141. * by one device.
  142. *
  143. * @const
  144. */
  145. MMAP_BLOCK_BITS = 17,
  146. /** @const */
  147. MMAP_BLOCK_SIZE = 1 << MMAP_BLOCK_BITS;
  148. /** @const */
  149. var MEM_PAGE_WRITTEN = 1;
  150. /** @const */
  151. var MAGIC_CPU_EXCEPTION = 0xDEADBEE;
  152. var
  153. /** @const */
  154. REPEAT_STRING_PREFIX_NONE = 0,
  155. /** @const */
  156. REPEAT_STRING_PREFIX_NZ = 1,
  157. /** @const */
  158. REPEAT_STRING_PREFIX_Z = 2;
  159. var
  160. /** @const */
  161. CR0_PE = 1,
  162. /** @const */
  163. CR0_MP = 1 << 1,
  164. /** @const */
  165. CR0_EM = 1 << 2,
  166. /** @const */
  167. CR0_TS = 1 << 3,
  168. /** @const */
  169. CR0_ET = 1 << 4,
  170. /** @const */
  171. CR0_WP = 1 << 16,
  172. /** @const */
  173. CR0_AM = 1 << 18,
  174. /** @const */
  175. CR0_NW = 1 << 29,
  176. /** @const */
  177. CR0_CD = 1 << 30,
  178. /** @const */
  179. CR0_PG = 1 << 31;
  180. var
  181. /** @const */
  182. CR4_VME = 1,
  183. /** @const */
  184. CR4_PVI = 1 << 1,
  185. /** @const */
  186. CR4_TSD = 1 << 2,
  187. /** @const */
  188. CR4_PSE = 1 << 4,
  189. /** @const */
  190. CR4_DE = 1 << 3,
  191. /** @const */
  192. CR4_PAE = 1 << 5,
  193. /** @const */
  194. CR4_PGE = 1 << 7,
  195. /** @const */
  196. CR4_OSFXSR = 1 << 9,
  197. /** @const */
  198. CR4_OSXMMEXCPT = 1 << 10;
  199. // Segment prefixes must not collide with reg_*s variables
  200. // _ZERO is a special zero offset segment
  201. var
  202. /** @const */
  203. SEG_PREFIX_NONE = -1,
  204. /** @const */
  205. SEG_PREFIX_ZERO = 7;
  206. var
  207. /** @const */
  208. IA32_SYSENTER_CS = 0x174,
  209. // Note: These are wrong in Intel's manuals. Fuck Intel
  210. /** @const */
  211. IA32_SYSENTER_ESP = 0x175,
  212. /** @const */
  213. IA32_SYSENTER_EIP = 0x176;
  214. /** @const */
  215. var IA32_TIME_STAMP_COUNTER = 0x10;
  216. /** @const */
  217. var IA32_PLATFORM_ID = 0x17;
  218. /** @const */
  219. var MSR_EBC_FREQUENCY_ID = 0x2C;
  220. /** @const */
  221. var IA32_APIC_BASE_MSR = 0x1B;
  222. /** @const */
  223. var IA32_BIOS_SIGN_ID = 0x8B;
  224. /** @const */
  225. var IA32_MISC_ENABLE = 0x1A0;
  226. /** @const */
  227. var IA32_RTIT_CTL = 0x570;
  228. /** @const */
  229. var MSR_SMI_COUNT = 0x34;
  230. /** @const */
  231. var IA32_MCG_CAP = 0x179;
  232. /** @const */
  233. var IA32_KERNEL_GS_BASE = 0xC0000101 | 0;
  234. /** @const */
  235. var MSR_PKG_C2_RESIDENCY = 0x60D;
  236. /** @const */
  237. var IA32_APIC_BASE_BSP = 1 << 8;
  238. /** @const */
  239. var IA32_APIC_BASE_EXTD = 1 << 10;
  240. /** @const */
  241. var IA32_APIC_BASE_EN = 1 << 11;
  242. /** @const */ var TSR_BACKLINK = 0x00;
  243. /** @const */ var TSR_CR3 = 0x1C;
  244. /** @const */ var TSR_EIP = 0x20;
  245. /** @const */ var TSR_EFLAGS = 0x24;
  246. /** @const */ var TSR_EAX = 0x28;
  247. /** @const */ var TSR_ECX = 0x2c;
  248. /** @const */ var TSR_EDX = 0x30;
  249. /** @const */ var TSR_EBX = 0x34;
  250. /** @const */ var TSR_ESP = 0x38;
  251. /** @const */ var TSR_EBP = 0x3c;
  252. /** @const */ var TSR_ESI = 0x40;
  253. /** @const */ var TSR_EDI = 0x44;
  254. /** @const */ var TSR_ES = 0x48;
  255. /** @const */ var TSR_CS = 0x4c;
  256. /** @const */ var TSR_SS = 0x50;
  257. /** @const */ var TSR_DS = 0x54;
  258. /** @const */ var TSR_FS = 0x58;
  259. /** @const */ var TSR_GS = 0x5c;
  260. /** @const */ var TSR_LDT = 0x60;
  261. /** @const */ var FW_CFG_SIGNATURE = 0x00;
  262. /** @const */ var FW_CFG_RAM_SIZE = 0x03;
  263. /** @const */ var FW_CFG_NB_CPUS = 0x05;
  264. /** @const */
  265. var PREFIX_MASK_REP = 0b11000;
  266. /** @const */
  267. var PREFIX_REPZ = 0b01000;
  268. /** @const */
  269. var PREFIX_REPNZ = 0b10000;
  270. /** @const */
  271. var PREFIX_MASK_SEGMENT = 0b111;
  272. /** @const */
  273. var PREFIX_MASK_OPSIZE = 0b100000;
  274. /** @const */
  275. var PREFIX_MASK_ADDRSIZE = 0b1000000;
  276. /** @const */
  277. var PREFIX_F2 = PREFIX_REPNZ; // alias
  278. /** @const */
  279. var PREFIX_F3 = PREFIX_REPZ; // alias
  280. /** @const */
  281. var PREFIX_66 = PREFIX_MASK_OPSIZE; // alias
  282. /** @const */
  283. var MXCSR_MASK = (0xFFFF & ~(1 << 6));
  284. /** @const */
  285. const P_IDLE = 0;
  286. /** @const */
  287. const P_DO_MANY_CYCLES = 1;
  288. /** @const */
  289. const P_GEN_INSTR = 2;
  290. /** @const */
  291. const P_RUN_FROM_CACHE = 3;
  292. /** @const */
  293. const P_RUN_INTERPRETED = 4;
  294. /** @const */
  295. var WASM_TABLE_SIZE = 0x10000;
  296. /** @const */
  297. var JIT_CACHE_ARRAY_SIZE = 0x40000;
  298. /** @const */
  299. const WASM_EXPORT_TABLE_NAME = "table";
  300. /** @const */
  301. // The space we need for misc internal state before the beginning of mem8; see global_pointers.h
  302. const GUEST_MEMORY_START = 0x800000;
  303. /** @const */
  304. const WASM_PAGE_SIZE = 64 * 1024;
  305. /** @const */
  306. const COVERAGE_EXPORT_PREFIX = "___profn_";
  307. /** @const */
  308. const COVERAGE_FILE_PREFIX = "coverage_data";