mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 15:49:16 +02:00
+ add 'jmp rm16' and 'call rm16' before the rm32 versions on i8086, so the
16-bit version is picked up by default for opsize=S_NO. Previously the 386 version was picked on i8086, but the generated code was correct, because we don't yet generate a 0x66 prefix for "\325", which leads to many 32-bit instructions not being assembled correctly with the internal asm obj writer on the i8086 git-svn-id: trunk@32887 -
This commit is contained in:
parent
a228a3bf4c
commit
e877bae4fc
@ -1,2 +1,2 @@
|
|||||||
{ don't edit, this file is generated from x86ins.dat }
|
{ don't edit, this file is generated from x86ins.dat }
|
||||||
1973;
|
1975;
|
||||||
|
@ -378,6 +378,13 @@
|
|||||||
code : #208#2#15#186#133#21;
|
code : #208#2#15#186#133#21;
|
||||||
flags : if_386 or if_sb
|
flags : if_386 or if_sb
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
opcode : A_CALL;
|
||||||
|
ops : 1;
|
||||||
|
optypes : (ot_rm_gpr or ot_bits16,ot_none,ot_none,ot_none);
|
||||||
|
code : #212#1#255#130;
|
||||||
|
flags : if_8086 or if_16bitonly
|
||||||
|
),
|
||||||
(
|
(
|
||||||
opcode : A_CALL;
|
opcode : A_CALL;
|
||||||
ops : 1;
|
ops : 1;
|
||||||
@ -2541,6 +2548,13 @@
|
|||||||
code : #208#1#233#52;
|
code : #208#1#233#52;
|
||||||
flags : if_8086 or if_pass2
|
flags : if_8086 or if_pass2
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
opcode : A_JMP;
|
||||||
|
ops : 1;
|
||||||
|
optypes : (ot_rm_gpr or ot_bits16,ot_none,ot_none,ot_none);
|
||||||
|
code : #212#1#255#132;
|
||||||
|
flags : if_8086 or if_16bitonly
|
||||||
|
),
|
||||||
(
|
(
|
||||||
opcode : A_JMP;
|
opcode : A_JMP;
|
||||||
ops : 1;
|
ops : 1;
|
||||||
|
@ -128,6 +128,9 @@ rm16|32|64,imm \320\2\x0F\xBA\205\25 386,SB
|
|||||||
; Compiler emits CALL/JMP with opsize=S_NO which matches any size,
|
; Compiler emits CALL/JMP with opsize=S_NO which matches any size,
|
||||||
; and will match the first entry in sequence.
|
; and will match the first entry in sequence.
|
||||||
; Therefore rm16 must be placed after rm32/rm64
|
; Therefore rm16 must be placed after rm32/rm64
|
||||||
|
; However, on i8086, rm16 must be first, so it's repeated in the beginning
|
||||||
|
; with a 16BITONLY flag
|
||||||
|
rm16 \324\1\xFF\202 8086,16BITONLY
|
||||||
rm32 \325\1\xFF\202 386,NOX86_64
|
rm32 \325\1\xFF\202 386,NOX86_64
|
||||||
rm64 \335\1\xFF\202 X86_64
|
rm64 \335\1\xFF\202 X86_64
|
||||||
rm16 \324\1\xFF\202 8086
|
rm16 \324\1\xFF\202 8086
|
||||||
@ -887,8 +890,11 @@ imm \1\xE3\50 X86_64
|
|||||||
[JMP,jmpX]
|
[JMP,jmpX]
|
||||||
(Ch_ROp1, Ch_None, Ch_None)
|
(Ch_ROp1, Ch_None, Ch_None)
|
||||||
; rm16 should be after rm32/rm64, see comments for CALL.
|
; rm16 should be after rm32/rm64, see comments for CALL.
|
||||||
|
; However, on i8086, rm16 must be first, so it's repeated in the beginning
|
||||||
|
; with a 16BITONLY flag
|
||||||
imm8 \1\xEB\50 8086,PASS2
|
imm8 \1\xEB\50 8086,PASS2
|
||||||
imm16|32 \320\1\xE9\64 8086,PASS2
|
imm16|32 \320\1\xE9\64 8086,PASS2
|
||||||
|
rm16 \324\1\xFF\204 8086,16BITONLY
|
||||||
rm32 \325\1\xFF\204 386,NOX86_64
|
rm32 \325\1\xFF\204 386,NOX86_64
|
||||||
rm64 \335\1\xFF\204 X86_64
|
rm64 \335\1\xFF\204 X86_64
|
||||||
rm16 \324\1\xFF\204 8086
|
rm16 \324\1\xFF\204 8086
|
||||||
|
Loading…
Reference in New Issue
Block a user