mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-05 10:11:04 +01:00
* fix for inline asm of instructions with 32-bit constant operands on i8086
git-svn-id: trunk@37519 -
This commit is contained in:
parent
2af5c9d508
commit
325e66287c
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -12105,6 +12105,7 @@ tests/test/cg/variants/tvarol9.pp svneol=native#text/plain
|
|||||||
tests/test/cg/variants/tvarol91.pp svneol=native#text/plain
|
tests/test/cg/variants/tvarol91.pp svneol=native#text/plain
|
||||||
tests/test/cg/variants/tvarol94.pp svneol=native#text/plain
|
tests/test/cg/variants/tvarol94.pp svneol=native#text/plain
|
||||||
tests/test/cg/variants/tvarol96.pp svneol=native#text/plain
|
tests/test/cg/variants/tvarol96.pp svneol=native#text/plain
|
||||||
|
tests/test/cpu16/i8086/tasm16_32_1.pp svneol=native#text/pascal
|
||||||
tests/test/cpu16/i8086/tasmseg1.pp svneol=native#text/pascal
|
tests/test/cpu16/i8086/tasmseg1.pp svneol=native#text/pascal
|
||||||
tests/test/cpu16/i8086/tfarcal1.pp svneol=native#text/pascal
|
tests/test/cpu16/i8086/tfarcal1.pp svneol=native#text/pascal
|
||||||
tests/test/cpu16/i8086/tfarcal2.pp svneol=native#text/pascal
|
tests/test/cpu16/i8086/tfarcal2.pp svneol=native#text/pascal
|
||||||
|
|||||||
@ -50,11 +50,13 @@ type
|
|||||||
TOprRec = record
|
TOprRec = record
|
||||||
case typ:TOprType of
|
case typ:TOprType of
|
||||||
OPR_NONE : ();
|
OPR_NONE : ();
|
||||||
{$ifdef AVR}
|
{$if defined(AVR)}
|
||||||
OPR_CONSTANT : (val:word);
|
OPR_CONSTANT : (val:word);
|
||||||
{$else AVR}
|
{$elseif defined(i8086)}
|
||||||
|
OPR_CONSTANT : (val:longint);
|
||||||
|
{$else}
|
||||||
OPR_CONSTANT : (val:aint);
|
OPR_CONSTANT : (val:aint);
|
||||||
{$endif AVR}
|
{$endif}
|
||||||
OPR_SYMBOL : (symbol:tasmsymbol;symofs:aint;symseg:boolean;sym_farproc_entry:boolean);
|
OPR_SYMBOL : (symbol:tasmsymbol;symofs:aint;symseg:boolean;sym_farproc_entry:boolean);
|
||||||
OPR_REFERENCE : (varsize:asizeint; constoffset: asizeint;ref_farproc_entry:boolean;ref:treference);
|
OPR_REFERENCE : (varsize:asizeint; constoffset: asizeint;ref_farproc_entry:boolean;ref:treference);
|
||||||
OPR_LOCAL : (localvarsize, localconstoffset: asizeint;localsym:tabstractnormalvarsym;localsymofs:aint;localindexreg:tregister;localscale:byte;localgetoffset,localforceref:boolean);
|
OPR_LOCAL : (localvarsize, localconstoffset: asizeint;localsym:tabstractnormalvarsym;localsymofs:aint;localindexreg:tregister;localscale:byte;localgetoffset,localforceref:boolean);
|
||||||
|
|||||||
@ -2862,7 +2862,11 @@ implementation
|
|||||||
}
|
}
|
||||||
|
|
||||||
var
|
var
|
||||||
|
{$ifdef i8086}
|
||||||
|
currval : longint;
|
||||||
|
{$else i8086}
|
||||||
currval : aint;
|
currval : aint;
|
||||||
|
{$endif i8086}
|
||||||
currsym : tobjsymbol;
|
currsym : tobjsymbol;
|
||||||
currrelreloc,
|
currrelreloc,
|
||||||
currabsreloc,
|
currabsreloc,
|
||||||
@ -2932,7 +2936,11 @@ implementation
|
|||||||
end;
|
end;
|
||||||
top_const :
|
top_const :
|
||||||
begin
|
begin
|
||||||
|
{$ifdef i8086}
|
||||||
|
currval:=longint(oper[opidx]^.val);
|
||||||
|
{$else i8086}
|
||||||
currval:=aint(oper[opidx]^.val);
|
currval:=aint(oper[opidx]^.val);
|
||||||
|
{$endif i8086}
|
||||||
currsym:=nil;
|
currsym:=nil;
|
||||||
currabsreloc:=RELOC_ABSOLUTE;
|
currabsreloc:=RELOC_ABSOLUTE;
|
||||||
currabsreloc32:=RELOC_ABSOLUTE32;
|
currabsreloc32:=RELOC_ABSOLUTE32;
|
||||||
|
|||||||
33
tests/test/cpu16/i8086/tasm16_32_1.pp
Normal file
33
tests/test/cpu16/i8086/tasm16_32_1.pp
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{ %cpu=i8086 }
|
||||||
|
|
||||||
|
{ i8086 test for correct assembly of 32-bit instructions on the i8086 target }
|
||||||
|
|
||||||
|
{ this one tests an instruction with a 32-bit const operand }
|
||||||
|
|
||||||
|
program tasm16_32_1;
|
||||||
|
|
||||||
|
{$asmmode intel}
|
||||||
|
{$asmcpu 80386}
|
||||||
|
|
||||||
|
var
|
||||||
|
lo_word, hi_word: Word;
|
||||||
|
begin
|
||||||
|
asm
|
||||||
|
db 66h, 31h, 0c0h { xor eax, eax }
|
||||||
|
|
||||||
|
{ the actual instruction being tested: }
|
||||||
|
mov eax, 12345678h
|
||||||
|
|
||||||
|
db 66h, 50h { push eax }
|
||||||
|
|
||||||
|
pop word ptr [lo_word]
|
||||||
|
pop word ptr [hi_word]
|
||||||
|
end;
|
||||||
|
if (lo_word=$5678) and (hi_word=$1234) then
|
||||||
|
Writeln('Ok!')
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
Writeln('Error!');
|
||||||
|
Halt(1);
|
||||||
|
end;
|
||||||
|
end.
|
||||||
Loading…
Reference in New Issue
Block a user