You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
336 lines
11 KiB
336 lines
11 KiB
/*-*- mode:unix-assembly; indent-tabs-mode:t; tab-width:8; coding:utf-8 -*-│ |
|
│vi: set et ft=asm ts=8 sw=8 fenc=utf-8 :vi│ |
|
╞══════════════════════════════════════════════════════════════════════════════╡ |
|
│ Copyright 2018 Intel Corporation │ |
|
│ Copyright 2020 Justine Alexandra Roberts Tunney │ |
|
│ │ |
|
│ Licensed under the Apache License, Version 2.0 (the "License"); │ |
|
│ you may not use this file except in compliance with the License. │ |
|
│ You may obtain a copy of the License at │ |
|
│ │ |
|
│ http://www.apache.org/licenses/LICENSE-2.0 │ |
|
│ │ |
|
│ Unless required by applicable law or agreed to in writing, software │ |
|
│ distributed under the License is distributed on an "AS IS" BASIS, │ |
|
│ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. │ |
|
│ See the License for the specific language governing permissions and │ |
|
│ limitations under the License. │ |
|
╚─────────────────────────────────────────────────────────────────────────────*/ |
|
#include "libc/macros.h" |
|
|
|
/ Phash tables for instruction length decoding. |
|
/ @see build/rle.py for more context here |
|
|
|
.initbss 300,_init_x86tab |
|
xed_prefix_table_bit: |
|
.zero 32 |
|
.endobj xed_prefix_table_bit,globl,hidden |
|
xed_has_modrm_2d: |
|
.zero 512 |
|
.endobj xed_has_modrm_2d,globl,hidden |
|
xed_has_disp_regular: |
|
.zero 96 |
|
.endobj xed_has_disp_regular,globl,hidden |
|
xed_has_sib_table: |
|
.zero 96 |
|
.endobj xed_has_sib_table,globl,hidden |
|
xed_disp_bits_2d: |
|
.zero 512 |
|
.endobj xed_disp_bits_2d,globl,hidden |
|
xed_imm_bits_2d: |
|
.zero 512 |
|
.endobj xed_imm_bits_2d,globl,hidden |
|
.previous |
|
|
|
.initro 300,_init_x86tab # 536 bytes (30%) |
|
xed_prefix_table_bit.rodata: |
|
.byte 4,0x00 # 00─03 ∅─♥ |
|
.byte 4,0x40 # 04─07 ♦─• |
|
.byte 2,0xff # 08─09 ◘─○ |
|
.byte 2,0x00 # 0a─0b ◙─♂ |
|
.byte 1,0xf0 # 0c─0c ♀ |
|
.byte 17,0x00 # 0d─1d ♪─↔ |
|
.byte 1,0x0d # 1e─1e ▲ |
|
.byte 1,0x00 # 1f─1f ▼ |
|
.endobj xed_prefix_table_bit.rodata |
|
|
|
xed_has_modrm_2d.rodata: |
|
.byte 4,0x01 # 00─03 ∅─♥ |
|
.byte 4,0x00 # 04─07 ♦─• |
|
.byte 4,0x01 # 08─0b ◘─♂ |
|
.byte 3,0x00 # 0c─0e ♀─♫ |
|
.byte 1,0x03 # 0f─0f ☼ |
|
.byte 4,0x01 # 10─13 ►─‼ |
|
.byte 4,0x00 # 14─17 ¶─↨ |
|
.byte 4,0x01 # 18─1b ↑─← |
|
.byte 4,0x00 # 1c─1f ∟─▼ |
|
.byte 4,0x01 # 20─23 ─# |
|
.byte 2,0x00 # 24─25 $─% |
|
.byte 1,0x03 # 26─26 & |
|
.byte 1,0x00 # 27─27 ' |
|
.byte 4,0x01 # 28─2b (─+ |
|
.byte 2,0x00 # 2c─2d ,── |
|
.byte 1,0x03 # 2e─2e . |
|
.byte 1,0x00 # 2f─2f / |
|
.byte 4,0x01 # 30─33 0─3 |
|
.byte 2,0x00 # 34─35 4─5 |
|
.byte 1,0x03 # 36─36 6 |
|
.byte 1,0x00 # 37─37 7 |
|
.byte 4,0x01 # 38─3b 8─; |
|
.byte 2,0x00 # 3c─3d <─= |
|
.byte 1,0x03 # 3e─3e > |
|
.byte 35,0x00 # 3f─61 ?─a |
|
.byte 2,0x01 # 62─63 b─c |
|
.byte 4,0x03 # 64─67 d─g |
|
.byte 1,0x00 # 68─68 h |
|
.byte 1,0x01 # 69─69 i |
|
.byte 1,0x00 # 6a─6a j |
|
.byte 1,0x01 # 6b─6b k |
|
.byte 20,0x00 # 6c─7f l─⌂ |
|
.byte 16,0x01 # 80─8f Ç─Å |
|
.byte 48,0x00 # 90─bf É─┐ |
|
.byte 2,0x01 # c0─c1 └─┴ |
|
.byte 2,0x00 # c2─c3 ┬─├ |
|
.byte 4,0x01 # c4─c7 ──╟ |
|
.byte 8,0x00 # c8─cf ╚─╧ |
|
.byte 4,0x01 # d0─d3 ╨─╙ |
|
.byte 4,0x00 # d4─d7 ╘─╫ |
|
.byte 8,0x01 # d8─df ╪─▀ |
|
.byte 16,0x00 # e0─ef α─∩ |
|
.byte 1,0x03 # f0─f0 ≡ |
|
.byte 1,0x00 # f1─f1 ± |
|
.byte 2,0x03 # f2─f3 ≥─≤ |
|
.byte 2,0x00 # f4─f5 ⌠─⌡ |
|
.byte 2,0x01 # f6─f7 ÷─≈ |
|
.byte 6,0x00 # f8─fd °─² |
|
.byte 6,0x01 # fe─103 |
|
.byte 1,0x03 # 104─104 |
|
.byte 5,0x00 # 105─109 |
|
.byte 1,0x03 # 10a─10a |
|
.byte 1,0x00 # 10b─10b |
|
.byte 1,0x03 # 10c─10c |
|
.byte 1,0x01 # 10d─10d |
|
.byte 1,0x00 # 10e─10e |
|
.byte 1,0x03 # 10f─10f |
|
.byte 16,0x01 # 110─11f |
|
.byte 4,0x02 # 120─123 |
|
.byte 4,0x03 # 124─127 |
|
.byte 8,0x01 # 128─12f |
|
.byte 6,0x00 # 130─135 |
|
.byte 1,0x03 # 136─136 |
|
.byte 1,0x00 # 137─137 |
|
.byte 8,0x03 # 138─13f |
|
.byte 55,0x01 # 140─176 |
|
.byte 1,0x00 # 177─177 |
|
.byte 8,0x01 # 178─17f |
|
.byte 16,0x00 # 180─18f |
|
.byte 16,0x01 # 190─19f |
|
.byte 3,0x00 # 1a0─1a2 |
|
.byte 3,0x01 # 1a3─1a5 |
|
.byte 2,0x03 # 1a6─1a7 |
|
.byte 3,0x00 # 1a8─1aa |
|
.byte 29,0x01 # 1ab─1c7 |
|
.byte 8,0x00 # 1c8─1cf |
|
.byte 48,0x01 # 1d0─1ff |
|
.endobj xed_has_modrm_2d.rodata |
|
|
|
xed_has_disp_regular.rodata: |
|
.byte 6,0x00 # 00─05 ∅─♣ |
|
.byte 1,0x02 # 06─06 ♠ |
|
.byte 1,0x00 # 07─07 • |
|
.byte 8,0x01 # 08─0f ◘─☼ |
|
.byte 8,0x02 # 10─17 ►─↨ |
|
.byte 13,0x00 # 18─24 ↑─$ |
|
.byte 1,0x04 # 25─25 % |
|
.byte 2,0x00 # 26─27 &─' |
|
.byte 8,0x01 # 28─2f (─/ |
|
.byte 8,0x04 # 30─37 0─7 |
|
.byte 13,0x00 # 38─44 8─D |
|
.byte 1,0x04 # 45─45 E |
|
.byte 2,0x00 # 46─47 F─G |
|
.byte 8,0x01 # 48─4f H─O |
|
.byte 8,0x04 # 50─57 P─W |
|
.byte 8,0x00 # 58─5f X─_ |
|
.endobj xed_has_disp_regular.rodata |
|
|
|
xed_has_sib_table.rodata: |
|
.byte 36,FALSE # 00─23 ∅─# |
|
.byte 1,TRUE # 24─24 $ |
|
.byte 7,FALSE # 25─2b %─+ |
|
.byte 1,TRUE # 2c─2c , |
|
.byte 7,FALSE # 2d─33 ──3 |
|
.byte 1,TRUE # 34─34 4 |
|
.byte 15,FALSE # 35─43 5─C |
|
.byte 1,TRUE # 44─44 D |
|
.byte 7,FALSE # 45─4b E─K |
|
.byte 1,TRUE # 4c─4c L |
|
.byte 7,FALSE # 4d─53 M─S |
|
.byte 1,TRUE # 54─54 T |
|
.byte 11,FALSE # 55─5f U─_ |
|
.endobj xed_has_sib_table.rodata |
|
|
|
xed_disp_bits_2d.rodata: |
|
.byte 15,0x04 # 00─0e ∅─♫ |
|
.byte 1,0x00 # 0f─0f ☼ |
|
.byte 22,0x04 # 10─25 ►─% |
|
.byte 1,0x00 # 26─26 & |
|
.byte 7,0x04 # 27─2d '── |
|
.byte 1,0x00 # 2e─2e . |
|
.byte 7,0x04 # 2f─35 /─5 |
|
.byte 1,0x00 # 36─36 6 |
|
.byte 7,0x04 # 37─3d 7─= |
|
.byte 1,0x00 # 3e─3e > |
|
.byte 37,0x04 # 3f─63 ?─c |
|
.byte 4,0x00 # 64─67 d─g |
|
.byte 8,0x04 # 68─6f h─o |
|
.byte 16,0x01 # 70─7f p─⌂ |
|
.byte 26,0x04 # 80─99 Ç─Ö |
|
.byte 1,0x02 # 9a─9a Ü |
|
.byte 5,0x04 # 9b─9f ¢─ƒ |
|
.byte 4,0x05 # a0─a3 á─ú |
|
.byte 35,0x04 # a4─c6 ñ─╞ |
|
.byte 1,0x06 # c7─c7 ╟ |
|
.byte 24,0x04 # c8─df ╚─▀ |
|
.byte 4,0x01 # e0─e3 α─π |
|
.byte 4,0x04 # e4─e7 Σ─τ |
|
.byte 2,0x03 # e8─e9 Φ─Θ |
|
.byte 1,0x02 # ea─ea Ω |
|
.byte 1,0x01 # eb─eb δ |
|
.byte 4,0x04 # ec─ef ∞─∩ |
|
.byte 1,0x00 # f0─f0 ≡ |
|
.byte 1,0x04 # f1─f1 ± |
|
.byte 2,0x00 # f2─f3 ≥─≤ |
|
.byte 16,0x04 # f4─103 |
|
.byte 1,0x00 # 104─104 |
|
.byte 5,0x04 # 105─109 |
|
.byte 1,0x00 # 10a─10a |
|
.byte 1,0x04 # 10b─10b |
|
.byte 1,0x00 # 10c─10c |
|
.byte 2,0x04 # 10d─10e |
|
.byte 1,0x00 # 10f─10f |
|
.byte 20,0x04 # 110─123 |
|
.byte 4,0x00 # 124─127 |
|
.byte 14,0x04 # 128─135 |
|
.byte 1,0x00 # 136─136 |
|
.byte 1,0x04 # 137─137 |
|
.byte 8,0x00 # 138─13f |
|
.byte 64,0x04 # 140─17f |
|
.byte 16,0x03 # 180─18f |
|
.byte 22,0x04 # 190─1a5 |
|
.byte 2,0x00 # 1a6─1a7 |
|
.byte 88,0x04 # 1a8─1ff |
|
.endobj xed_disp_bits_2d.rodata |
|
|
|
xed_imm_bits_2d.rodata: |
|
.byte 4,0x01 # 00─03 ∅─♥ |
|
.byte 1,0x05 # 04─04 ♦ |
|
.byte 1,0x07 # 05─05 ♣ |
|
.byte 6,0x01 # 06─0b ♠─♂ |
|
.byte 1,0x09 # 0c─0c ♀ |
|
.byte 1,0x07 # 0d─0d ♪ |
|
.byte 1,0x01 # 0e─0e ♫ |
|
.byte 1,0x00 # 0f─0f ☼ |
|
.byte 4,0x01 # 10─13 ►─‼ |
|
.byte 1,0x05 # 14─14 ¶ |
|
.byte 1,0x07 # 15─15 § |
|
.byte 6,0x01 # 16─1b ▬─← |
|
.byte 1,0x05 # 1c─1c ∟ |
|
.byte 1,0x07 # 1d─1d ↔ |
|
.byte 6,0x01 # 1e─23 ▲─# |
|
.byte 1,0x05 # 24─24 $ |
|
.byte 1,0x07 # 25─25 % |
|
.byte 1,0x00 # 26─26 & |
|
.byte 5,0x01 # 27─2b '─+ |
|
.byte 1,0x05 # 2c─2c , |
|
.byte 1,0x07 # 2d─2d ─ |
|
.byte 1,0x00 # 2e─2e . |
|
.byte 5,0x01 # 2f─33 /─3 |
|
.byte 1,0x09 # 34─34 4 |
|
.byte 1,0x07 # 35─35 5 |
|
.byte 1,0x00 # 36─36 6 |
|
.byte 5,0x01 # 37─3b 7─; |
|
.byte 1,0x05 # 3c─3c < |
|
.byte 1,0x07 # 3d─3d = |
|
.byte 1,0x00 # 3e─3e > |
|
.byte 37,0x01 # 3f─63 ?─c |
|
.byte 4,0x00 # 64─67 d─g |
|
.byte 1,0x06 # 68─68 h |
|
.byte 1,0x07 # 69─69 i |
|
.byte 2,0x05 # 6a─6b j─k |
|
.byte 20,0x01 # 6c─7f l─⌂ |
|
.byte 1,0x05 # 80─80 Ç |
|
.byte 1,0x07 # 81─81 ü |
|
.byte 2,0x05 # 82─83 é─â |
|
.byte 22,0x01 # 84─99 ä─Ö |
|
.byte 1,0x08 # 9a─9a Ü |
|
.byte 13,0x01 # 9b─a7 ¢─º |
|
.byte 1,0x05 # a8─a8 ¿ |
|
.byte 1,0x07 # a9─a9 ⌐ |
|
.byte 6,0x01 # aa─af ¬─» |
|
.byte 8,0x09 # b0─b7 ░─╖ |
|
.byte 8,0x0a # b8─bf ╕─┐ |
|
.byte 2,0x09 # c0─c1 └─┴ |
|
.byte 1,0x08 # c2─c2 ┬ |
|
.byte 3,0x01 # c3─c5 ├─┼ |
|
.byte 1,0x09 # c6─c6 ╞ |
|
.byte 1,0x02 # c7─c7 ╟ |
|
.byte 1,0x0b # c8─c8 ╚ |
|
.byte 1,0x01 # c9─c9 ╔ |
|
.byte 1,0x08 # ca─ca ╩ |
|
.byte 2,0x01 # cb─cc ╦─╠ |
|
.byte 1,0x09 # cd─cd ═ |
|
.byte 6,0x01 # ce─d3 ╬─╙ |
|
.byte 2,0x09 # d4─d5 ╘─╒ |
|
.byte 14,0x01 # d6─e3 ╓─π |
|
.byte 4,0x09 # e4─e7 Σ─τ |
|
.byte 2,0x01 # e8─e9 Φ─Θ |
|
.byte 1,0x08 # ea─ea Ω |
|
.byte 5,0x01 # eb─ef δ─∩ |
|
.byte 1,0x00 # f0─f0 ≡ |
|
.byte 1,0x01 # f1─f1 ± |
|
.byte 2,0x00 # f2─f3 ≥─≤ |
|
.byte 2,0x01 # f4─f5 ⌠─⌡ |
|
.byte 1,0x03 # f6─f6 ÷ |
|
.byte 1,0x04 # f7─f7 ≈ |
|
.byte 12,0x01 # f8─103 |
|
.byte 1,0x00 # 104─104 |
|
.byte 5,0x01 # 105─109 |
|
.byte 1,0x00 # 10a─10a |
|
.byte 1,0x01 # 10b─10b |
|
.byte 1,0x00 # 10c─10c |
|
.byte 2,0x01 # 10d─10e |
|
.byte 1,0x00 # 10f─10f |
|
.byte 20,0x01 # 110─123 |
|
.byte 4,0x00 # 124─127 |
|
.byte 14,0x01 # 128─135 |
|
.byte 1,0x00 # 136─136 |
|
.byte 1,0x01 # 137─137 |
|
.byte 8,0x00 # 138─13f |
|
.byte 48,0x01 # 140─16f |
|
.byte 4,0x09 # 170─173 |
|
.byte 4,0x01 # 174─177 |
|
.byte 1,0x0c # 178─178 |
|
.byte 43,0x01 # 179─1a3 |
|
.byte 1,0x09 # 1a4─1a4 |
|
.byte 1,0x01 # 1a5─1a5 |
|
.byte 2,0x00 # 1a6─1a7 |
|
.byte 4,0x01 # 1a8─1ab |
|
.byte 1,0x09 # 1ac─1ac |
|
.byte 13,0x01 # 1ad─1b9 |
|
.byte 1,0x09 # 1ba─1ba |
|
.byte 7,0x01 # 1bb─1c1 |
|
.byte 1,0x09 # 1c2─1c2 |
|
.byte 1,0x01 # 1c3─1c3 |
|
.byte 3,0x09 # 1c4─1c6 |
|
.byte 57,0x01 # 1c7─1ff |
|
.endobj xed_imm_bits_2d.rodata |
|
|
|
.byte 0,0 # terminator |
|
.byte 0,0,0,0,0,0 # padding |
|
.previous |
|
|
|
.init.start 300,_init_x86tab |
|
call rldecode |
|
lodsl |
|
lodsw |
|
.init.end 300,_init_x86tab
|
|
|