GNU Binutils with patches for OS216
リビジョン | 07f5af7d3c635234284e7a0f7dd7a410b1628b8b (tree) |
---|---|
日時 | 2016-06-04 07:55:29 |
作者 | H.J. Lu <hjl.tools@gmai...> |
コミッター | H.J. Lu |
Handle indirect branches for AMD64 and Intel64
AMD64 spec and Intel64 spec differ in indirect branches in 64-bit mode.
AMD64 supports indirect branches with 16-bit address via the data size
prefix while the data size prefix is ignored by Intel64.
gas/
PR binutis/18386
* testsuite/gas/i386/i386.exp: Run x86-64-branch-4.
* testsuite/gas/i386/x86-64-branch.d: Updated.
* testsuite/gas/i386/ilp32/x86-64-branch.d: Likewise.
* testsuite/gas/i386/x86-64-branch-4.l: New file.
* testsuite/gas/i386/x86-64-branch-4.s: Likewise.
opcodes/
PR binutis/18386
* i386-dis.c (indirEv): Replace stack_v_mode with indir_v_mode.
(indir_v_mode): New.
Add comments for '&'.
(reg_table): Replace "{T|}" with "{&|}" on call and jmp.
(putop): Handle '&'.
(intel_operand_size): Handle indir_v_mode.
(OP_E_register): Likewise.
* i386-opc.tbl: Mark 64-bit indirect call/jmp as AMD64. Add
64-bit indirect call/jmp for AMD64.
* i386-tbl.h: Regenerated
@@ -1,3 +1,12 @@ | ||
1 | +2016-06-03 H.J. Lu <hongjiu.lu@intel.com> | |
2 | + | |
3 | + PR binutis/18386 | |
4 | + * testsuite/gas/i386/i386.exp: Run x86-64-branch-4. | |
5 | + * testsuite/gas/i386/x86-64-branch.d: Updated. | |
6 | + * testsuite/gas/i386/ilp32/x86-64-branch.d: Likewise. | |
7 | + * testsuite/gas/i386/x86-64-branch-4.l: New file. | |
8 | + * testsuite/gas/i386/x86-64-branch-4.s: Likewise. | |
9 | + | |
1 | 10 | 2016-06-03 Kyrylo Tkachov <kyrylo.tkachov@arm.com> |
2 | 11 | |
3 | 12 | * config/tc-aarch64.c (aarch64_cpus): Add cortex-a73 entry. |
@@ -816,6 +816,7 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_64_check]] t | ||
816 | 816 | run_dump_test "x86-64-jump" |
817 | 817 | run_dump_test "x86-64-branch-2" |
818 | 818 | run_list_test "x86-64-branch-3" "-al -mintel64" |
819 | + run_list_test "x86-64-branch-4" "-al -mintel64" | |
819 | 820 | |
820 | 821 | run_dump_test "x86-64-gotpcrel" |
821 | 822 | run_dump_test "x86-64-gotpcrel-no-relax" |
@@ -10,14 +10,14 @@ Disassembly of section .text: | ||
10 | 10 | 0+ <.text>: |
11 | 11 | [ ]*[a-f0-9]+: ff d0 callq \*%rax |
12 | 12 | [ ]*[a-f0-9]+: ff d0 callq \*%rax |
13 | -[ ]*[a-f0-9]+: 66 ff d0 callw \*%ax | |
14 | -[ ]*[a-f0-9]+: 66 ff d0 callw \*%ax | |
15 | -[ ]*[a-f0-9]+: 66 ff 10 callw \*\(%rax\) | |
13 | +[ ]*[a-f0-9]+: 66 ff d0 data16 callq \*%rax | |
14 | +[ ]*[a-f0-9]+: 66 ff d0 data16 callq \*%rax | |
15 | +[ ]*[a-f0-9]+: 66 ff 10 data16 callq \*\(%rax\) | |
16 | 16 | [ ]*[a-f0-9]+: ff e0 jmpq \*%rax |
17 | 17 | [ ]*[a-f0-9]+: ff e0 jmpq \*%rax |
18 | -[ ]*[a-f0-9]+: 66 ff e0 jmpw \*%ax | |
19 | -[ ]*[a-f0-9]+: 66 ff e0 jmpw \*%ax | |
20 | -[ ]*[a-f0-9]+: 66 ff 20 jmpw \*\(%rax\) | |
18 | +[ ]*[a-f0-9]+: 66 ff e0 data16 jmpq \*%rax | |
19 | +[ ]*[a-f0-9]+: 66 ff e0 data16 jmpq \*%rax | |
20 | +[ ]*[a-f0-9]+: 66 ff 20 data16 jmpq \*\(%rax\) | |
21 | 21 | [ ]*[a-f0-9]+: e8 00 00 00 00 callq 0x1f 1b: R_X86_64_PC32 \*ABS\*\+0x10003c |
22 | 22 | [ ]*[a-f0-9]+: e9 00 00 00 00 jmpq 0x24 20: R_X86_64_PC32 \*ABS\*\+0x10003c |
23 | 23 | [ ]*[a-f0-9]+: 66 e8 00 00 00 00 data16 callq 0x2a 26: R_X86_64_PC32 foo-0x4 |
@@ -25,14 +25,14 @@ Disassembly of section .text: | ||
25 | 25 | [ ]*[a-f0-9]+: 66 0f 82 00 00 00 00 data16 jb 0x37 33: R_X86_64_PC32 foo-0x4 |
26 | 26 | [ ]*[a-f0-9]+: ff d0 callq \*%rax |
27 | 27 | [ ]*[a-f0-9]+: ff d0 callq \*%rax |
28 | -[ ]*[a-f0-9]+: 66 ff d0 callw \*%ax | |
29 | -[ ]*[a-f0-9]+: 66 ff d0 callw \*%ax | |
30 | -[ ]*[a-f0-9]+: 66 ff 10 callw \*\(%rax\) | |
28 | +[ ]*[a-f0-9]+: 66 ff d0 data16 callq \*%rax | |
29 | +[ ]*[a-f0-9]+: 66 ff d0 data16 callq \*%rax | |
30 | +[ ]*[a-f0-9]+: 66 ff 10 data16 callq \*\(%rax\) | |
31 | 31 | [ ]*[a-f0-9]+: ff e0 jmpq \*%rax |
32 | 32 | [ ]*[a-f0-9]+: ff e0 jmpq \*%rax |
33 | -[ ]*[a-f0-9]+: 66 ff e0 jmpw \*%ax | |
34 | -[ ]*[a-f0-9]+: 66 ff e0 jmpw \*%ax | |
35 | -[ ]*[a-f0-9]+: 66 ff 20 jmpw \*\(%rax\) | |
33 | +[ ]*[a-f0-9]+: 66 ff e0 data16 jmpq \*%rax | |
34 | +[ ]*[a-f0-9]+: 66 ff e0 data16 jmpq \*%rax | |
35 | +[ ]*[a-f0-9]+: 66 ff 20 data16 jmpq \*\(%rax\) | |
36 | 36 | [ ]*[a-f0-9]+: e8 00 00 00 00 callq 0x56 52: R_X86_64_PC32 \*ABS\*\+0x10003c |
37 | 37 | [ ]*[a-f0-9]+: e9 00 00 00 00 jmpq 0x5b 57: R_X86_64_PC32 \*ABS\*\+0x10003c |
38 | 38 | #pass |
@@ -0,0 +1,33 @@ | ||
1 | +.*: Assembler messages: | |
2 | +.*:2: Error: invalid instruction suffix for `call' | |
3 | +.*:3: Error: invalid instruction suffix for `call' | |
4 | +.*:4: Error: operand type mismatch for `jmp' | |
5 | +.*:5: Error: invalid instruction suffix for `jmp' | |
6 | +.*:6: Error: invalid instruction suffix for `jmp' | |
7 | +.*:9: Error: operand type mismatch for `call' | |
8 | +.*:10: Error: invalid instruction suffix for `call' | |
9 | +.*:11: Error: invalid instruction suffix for `call' | |
10 | +.*:12: Error: invalid instruction suffix for `call' | |
11 | +.*:13: Error: operand type mismatch for `jmp' | |
12 | +.*:14: Error: invalid instruction suffix for `jmp' | |
13 | +.*:15: Error: invalid instruction suffix for `jmp' | |
14 | +.*:16: Error: invalid instruction suffix for `jmp' | |
15 | +GAS LISTING .* | |
16 | +#... | |
17 | +[ ]*1[ ]+\.text | |
18 | +[ ]*2[ ]+callw \*%ax | |
19 | +[ ]*3[ ]+callw \*\(%rax\) | |
20 | +[ ]*4[ ]+jmp \*%ax | |
21 | +[ ]*5[ ]+jmpw \*%ax | |
22 | +[ ]*6[ ]+jmpw \*\(%rax\) | |
23 | +[ ]*7[ ]+ | |
24 | +[ ]*8[ ]+\.intel_syntax noprefix | |
25 | +[ ]*9[ ]+call ax | |
26 | +[ ]*10[ ]+callw ax | |
27 | +[ ]*11[ ]+callw \[rax\] | |
28 | +[ ]*12[ ]+call WORD PTR \[rax\] | |
29 | +[ ]*13[ ]+jmp ax | |
30 | +[ ]*14[ ]+jmpw ax | |
31 | +[ ]*15[ ]+jmpw \[rax\] | |
32 | +[ ]*16[ ]+jmp WORD PTR \[rax\] | |
33 | +#pass |
@@ -0,0 +1,16 @@ | ||
1 | +.text | |
2 | + callw *%ax | |
3 | + callw *(%rax) | |
4 | + jmp *%ax | |
5 | + jmpw *%ax | |
6 | + jmpw *(%rax) | |
7 | + | |
8 | + .intel_syntax noprefix | |
9 | + call ax | |
10 | + callw ax | |
11 | + callw [rax] | |
12 | + call WORD PTR [rax] | |
13 | + jmp ax | |
14 | + jmpw ax | |
15 | + jmpw [rax] | |
16 | + jmp WORD PTR [rax] |
@@ -9,14 +9,14 @@ Disassembly of section .text: | ||
9 | 9 | 0+ <.text>: |
10 | 10 | [ ]*[a-f0-9]+: ff d0 callq \*%rax |
11 | 11 | [ ]*[a-f0-9]+: ff d0 callq \*%rax |
12 | -[ ]*[a-f0-9]+: 66 ff d0 callw \*%ax | |
13 | -[ ]*[a-f0-9]+: 66 ff d0 callw \*%ax | |
14 | -[ ]*[a-f0-9]+: 66 ff 10 callw \*\(%rax\) | |
12 | +[ ]*[a-f0-9]+: 66 ff d0 data16 callq \*%rax | |
13 | +[ ]*[a-f0-9]+: 66 ff d0 data16 callq \*%rax | |
14 | +[ ]*[a-f0-9]+: 66 ff 10 data16 callq \*\(%rax\) | |
15 | 15 | [ ]*[a-f0-9]+: ff e0 jmpq \*%rax |
16 | 16 | [ ]*[a-f0-9]+: ff e0 jmpq \*%rax |
17 | -[ ]*[a-f0-9]+: 66 ff e0 jmpw \*%ax | |
18 | -[ ]*[a-f0-9]+: 66 ff e0 jmpw \*%ax | |
19 | -[ ]*[a-f0-9]+: 66 ff 20 jmpw \*\(%rax\) | |
17 | +[ ]*[a-f0-9]+: 66 ff e0 data16 jmpq \*%rax | |
18 | +[ ]*[a-f0-9]+: 66 ff e0 data16 jmpq \*%rax | |
19 | +[ ]*[a-f0-9]+: 66 ff 20 data16 jmpq \*\(%rax\) | |
20 | 20 | [ ]*[a-f0-9]+: e8 (00|5b) 00 (00|10) 00 callq (0x1f|10007a <.text\+0x10007a>) |
21 | 21 | [ ]*[a-f0-9]+: e9 (00|60) 00 (00|10) 00 jmpq (0x24|100084 <.text\+0x100084>) |
22 | 22 | [ ]*[a-f0-9]+: 66 e8 00 00 00 00 data16 callq (0x2a|2a <.text\+0x2a>) |
@@ -24,14 +24,14 @@ Disassembly of section .text: | ||
24 | 24 | [ ]*[a-f0-9]+: 66 0f 82 00 00 00 00 data16 jb (0x37|37 <.text\+0x37>) |
25 | 25 | [ ]*[a-f0-9]+: ff d0 callq \*%rax |
26 | 26 | [ ]*[a-f0-9]+: ff d0 callq \*%rax |
27 | -[ ]*[a-f0-9]+: 66 ff d0 callw \*%ax | |
28 | -[ ]*[a-f0-9]+: 66 ff d0 callw \*%ax | |
29 | -[ ]*[a-f0-9]+: 66 ff 10 callw \*\(%rax\) | |
27 | +[ ]*[a-f0-9]+: 66 ff d0 data16 callq \*%rax | |
28 | +[ ]*[a-f0-9]+: 66 ff d0 data16 callq \*%rax | |
29 | +[ ]*[a-f0-9]+: 66 ff 10 data16 callq \*\(%rax\) | |
30 | 30 | [ ]*[a-f0-9]+: ff e0 jmpq \*%rax |
31 | 31 | [ ]*[a-f0-9]+: ff e0 jmpq \*%rax |
32 | -[ ]*[a-f0-9]+: 66 ff e0 jmpw \*%ax | |
33 | -[ ]*[a-f0-9]+: 66 ff e0 jmpw \*%ax | |
34 | -[ ]*[a-f0-9]+: 66 ff 20 jmpw \*\(%rax\) | |
32 | +[ ]*[a-f0-9]+: 66 ff e0 data16 jmpq \*%rax | |
33 | +[ ]*[a-f0-9]+: 66 ff e0 data16 jmpq \*%rax | |
34 | +[ ]*[a-f0-9]+: 66 ff 20 data16 jmpq \*\(%rax\) | |
35 | 35 | [ ]*[a-f0-9]+: e8 (00|92) 00 (00|10) 00 callq (0x56|1000e8 <.text\+0x1000e8>) |
36 | 36 | [ ]*[a-f0-9]+: e9 (00|97) 00 (00|10) 00 jmpq (0x5b|1000f2 <.text\+0x1000f2>) |
37 | 37 | #pass |
@@ -1,3 +1,17 @@ | ||
1 | +2016-06-03 H.J. Lu <hongjiu.lu@intel.com> | |
2 | + | |
3 | + PR binutis/18386 | |
4 | + * i386-dis.c (indirEv): Replace stack_v_mode with indir_v_mode. | |
5 | + (indir_v_mode): New. | |
6 | + Add comments for '&'. | |
7 | + (reg_table): Replace "{T|}" with "{&|}" on call and jmp. | |
8 | + (putop): Handle '&'. | |
9 | + (intel_operand_size): Handle indir_v_mode. | |
10 | + (OP_E_register): Likewise. | |
11 | + * i386-opc.tbl: Mark 64-bit indirect call/jmp as AMD64. Add | |
12 | + 64-bit indirect call/jmp for AMD64. | |
13 | + * i386-tbl.h: Regenerated | |
14 | + | |
1 | 15 | 2016-06-02 Andrew Burgess <andrew.burgess@embecosm.com> |
2 | 16 | |
3 | 17 | * arc-dis.c (struct arc_operand_iterator): New structure. |
@@ -258,7 +258,7 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr) | ||
258 | 258 | #define Edw { OP_E, dw_mode } |
259 | 259 | #define Edqd { OP_E, dqd_mode } |
260 | 260 | #define Eq { OP_E, q_mode } |
261 | -#define indirEv { OP_indirE, stack_v_mode } | |
261 | +#define indirEv { OP_indirE, indir_v_mode } | |
262 | 262 | #define indirEp { OP_indirE, f_mode } |
263 | 263 | #define stackEv { OP_E, stack_v_mode } |
264 | 264 | #define Em { OP_E, m_mode } |
@@ -561,6 +561,8 @@ enum | ||
561 | 561 | /* 4- or 6-byte pointer operand */ |
562 | 562 | f_mode, |
563 | 563 | const_1_mode, |
564 | + /* v_mode for indirect branch opcodes. */ | |
565 | + indir_v_mode, | |
564 | 566 | /* v_mode for stack-related opcodes. */ |
565 | 567 | stack_v_mode, |
566 | 568 | /* non-quad operand size depends on prefixes */ |
@@ -2483,6 +2485,9 @@ struct dis386 { | ||
2483 | 2485 | suffix_always is true (lcall/ljmp). |
2484 | 2486 | '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending |
2485 | 2487 | on operand size prefix. |
2488 | + '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction | |
2489 | + has no operand size prefix for AMD64 ISA, behave as 'P' | |
2490 | + otherwise | |
2486 | 2491 | |
2487 | 2492 | 2 upper case letter macros: |
2488 | 2493 | "XY" => print 'x' or 'y' if suffix_always is true or no register |
@@ -3531,9 +3536,9 @@ static const struct dis386 reg_table[][8] = { | ||
3531 | 3536 | { |
3532 | 3537 | { "incQ", { Evh1 }, 0 }, |
3533 | 3538 | { "decQ", { Evh1 }, 0 }, |
3534 | - { "call{T|}", { indirEv, BND }, 0 }, | |
3539 | + { "call{&|}", { indirEv, BND }, 0 }, | |
3535 | 3540 | { MOD_TABLE (MOD_FF_REG_3) }, |
3536 | - { "jmp{T|}", { indirEv, BND }, 0 }, | |
3541 | + { "jmp{&|}", { indirEv, BND }, 0 }, | |
3537 | 3542 | { MOD_TABLE (MOD_FF_REG_5) }, |
3538 | 3543 | { "pushU", { stackEv }, 0 }, |
3539 | 3544 | { Bad_Opcode }, |
@@ -14296,6 +14301,15 @@ case_L: | ||
14296 | 14301 | if (!(rex & REX_W)) |
14297 | 14302 | used_prefixes |= (prefixes & PREFIX_DATA); |
14298 | 14303 | break; |
14304 | + case '&': | |
14305 | + if (!intel_syntax | |
14306 | + && address_mode == mode_64bit | |
14307 | + && isa64 == intel64) | |
14308 | + { | |
14309 | + *obufp++ = 'q'; | |
14310 | + break; | |
14311 | + } | |
14312 | + /* Fall through. */ | |
14299 | 14313 | case 'T': |
14300 | 14314 | if (!intel_syntax |
14301 | 14315 | && address_mode == mode_64bit |
@@ -14816,6 +14830,12 @@ intel_operand_size (int bytemode, int sizeflag) | ||
14816 | 14830 | case dqw_swap_mode: |
14817 | 14831 | oappend ("WORD PTR "); |
14818 | 14832 | break; |
14833 | + case indir_v_mode: | |
14834 | + if (address_mode == mode_64bit && isa64 == intel64) | |
14835 | + { | |
14836 | + oappend ("QWORD PTR "); | |
14837 | + break; | |
14838 | + } | |
14819 | 14839 | case stack_v_mode: |
14820 | 14840 | if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W))) |
14821 | 14841 | { |
@@ -15193,6 +15213,12 @@ OP_E_register (int bytemode, int sizeflag) | ||
15193 | 15213 | case bnd_mode: |
15194 | 15214 | names = names_bnd; |
15195 | 15215 | break; |
15216 | + case indir_v_mode: | |
15217 | + if (address_mode == mode_64bit && isa64 == intel64) | |
15218 | + { | |
15219 | + names = names64; | |
15220 | + break; | |
15221 | + } | |
15196 | 15222 | case stack_v_mode: |
15197 | 15223 | if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W))) |
15198 | 15224 | { |
@@ -322,7 +322,8 @@ call, 1, 0xe8, None, 1, CpuNo64, JumpDword|DefaultSize|No_bSuf|No_sSuf|No_qSuf|N | ||
322 | 322 | call, 1, 0xe8, None, 1, Cpu64, AMD64|JumpDword|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk, { Disp16|Disp32S } |
323 | 323 | call, 1, 0xe8, None, 1, Cpu64, Intel64|JumpDword|DefaultSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk, { Disp32S } |
324 | 324 | call, 1, 0xff, 0x2, 1, CpuNo64, Modrm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Reg16|Reg32|Word|Dword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|JumpAbsolute } |
325 | -call, 1, 0xff, 0x2, 1, Cpu64, Modrm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk, { Reg16|Reg64|Word|Qword|Unspecified|BaseIndex|Disp8|Disp32|Disp32S|JumpAbsolute } | |
325 | +call, 1, 0xff, 0x2, 1, Cpu64, AMD64|Modrm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk, { Reg16|Reg64|Word|Qword|Unspecified|BaseIndex|Disp8|Disp32|Disp32S|JumpAbsolute } | |
326 | +call, 1, 0xff, 0x2, 1, Cpu64, Intel64|Modrm|DefaultSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk, { Reg64|Qword|Unspecified|BaseIndex|Disp8|Disp32|Disp32S|JumpAbsolute } | |
326 | 327 | // Intel Syntax |
327 | 328 | call, 2, 0x9a, None, 1, CpuNo64, JumpInterSegment|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm16, Imm16|Imm32 } |
328 | 329 | // Intel Syntax |
@@ -334,7 +335,8 @@ jmp, 1, 0xeb, None, 1, CpuNo64, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ | ||
334 | 335 | jmp, 1, 0xeb, None, 1, Cpu64, AMD64|Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32S } |
335 | 336 | jmp, 1, 0xeb, None, 1, Cpu64, Intel64|Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp32S } |
336 | 337 | jmp, 1, 0xff, 0x4, 1, CpuNo64, Modrm|No_bSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Reg16|Reg32|Word|Dword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|JumpAbsolute } |
337 | -jmp, 1, 0xff, 0x4, 1, Cpu64, Modrm|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk, { Reg16|Reg64|Word|Qword|Unspecified|BaseIndex|Disp8|Disp32|Disp32S|JumpAbsolute } | |
338 | +jmp, 1, 0xff, 0x4, 1, Cpu64, AMD64|Modrm|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk, { Reg16|Reg64|Word|Qword|Unspecified|BaseIndex|Disp8|Disp32|Disp32S|JumpAbsolute } | |
339 | +jmp, 1, 0xff, 0x4, 1, Cpu64, Intel64|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk, { Reg64|Qword|Unspecified|BaseIndex|Disp8|Disp32|Disp32S|JumpAbsolute } | |
338 | 340 | // Intel Syntax. |
339 | 341 | jmp, 2, 0xea, None, 1, CpuNo64, JumpInterSegment|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm16, Imm16|Imm32 } |
340 | 342 | // Intel Syntax. |
@@ -3230,10 +3230,23 @@ const insn_template i386_optab[] = | ||
3230 | 3230 | { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, |
3231 | 3231 | 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, |
3232 | 3232 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
3233 | - 0, 0, 0, 0 }, | |
3233 | + 0, 0, 1, 0 }, | |
3234 | 3234 | { { { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
3235 | 3235 | 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, |
3236 | 3236 | 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } } } }, |
3237 | + { "call", 1, 0xff, 0x2, 1, | |
3238 | + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
3239 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
3240 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
3241 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
3242 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, | |
3243 | + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, | |
3244 | + 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, | |
3245 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
3246 | + 0, 0, 0, 1 }, | |
3247 | + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
3248 | + 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, | |
3249 | + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } } } }, | |
3237 | 3250 | { "call", 2, 0x9a, None, 1, |
3238 | 3251 | { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
3239 | 3252 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
@@ -3353,10 +3366,23 @@ const insn_template i386_optab[] = | ||
3353 | 3366 | { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, |
3354 | 3367 | 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, |
3355 | 3368 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
3356 | - 0, 0, 0, 0 }, | |
3369 | + 0, 0, 1, 0 }, | |
3357 | 3370 | { { { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
3358 | 3371 | 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, |
3359 | 3372 | 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } } } }, |
3373 | + { "jmp", 1, 0xff, 0x4, 1, | |
3374 | + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
3375 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
3376 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
3377 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
3378 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, | |
3379 | + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, | |
3380 | + 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, | |
3381 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
3382 | + 0, 0, 0, 1 }, | |
3383 | + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
3384 | + 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, | |
3385 | + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } } } }, | |
3360 | 3386 | { "jmp", 2, 0xea, None, 1, |
3361 | 3387 | { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
3362 | 3388 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |