mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-20 10:45:08 +02:00
+ added test tasm18g.pp, which is an i386 version of tasm18.pp
git-svn-id: trunk@38231 -
This commit is contained in:
parent
f7ab96bbba
commit
1857373c1b
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -12508,6 +12508,7 @@ tests/test/tasm18c.pp svneol=native#text/plain
|
||||
tests/test/tasm18d.pp svneol=native#text/plain
|
||||
tests/test/tasm18e.pp svneol=native#text/plain
|
||||
tests/test/tasm18f.pp svneol=native#text/plain
|
||||
tests/test/tasm18g.pp svneol=native#text/plain
|
||||
tests/test/tasm2.inc svneol=native#text/plain
|
||||
tests/test/tasm2.pp svneol=native#text/plain
|
||||
tests/test/tasm2a.pp svneol=native#text/plain
|
||||
|
178
tests/test/tasm18g.pp
Normal file
178
tests/test/tasm18g.pp
Normal file
@ -0,0 +1,178 @@
|
||||
{ %CPU=i386 }
|
||||
program tasm18g;
|
||||
|
||||
{$asmmode intel}
|
||||
{$packrecords 1}
|
||||
|
||||
const
|
||||
cval = 1;
|
||||
|
||||
type
|
||||
foo = record
|
||||
b1: byte;
|
||||
w: word;
|
||||
b2: byte;
|
||||
end;
|
||||
foo2 = record
|
||||
bb1, bb2: byte;
|
||||
end;
|
||||
foo32 = record
|
||||
b1, b2, b3, b4: byte;
|
||||
end;
|
||||
foo32_2 = record
|
||||
b1: byte;
|
||||
l: longint;
|
||||
end;
|
||||
|
||||
const
|
||||
expect1: array [0..$CF] of byte = (
|
||||
$66,$F7,$07,$01,$00, { TEST WORD PTR [EDI],0001 }
|
||||
$F6,$07,$01, { TEST BYTE PTR [EDI],01 }
|
||||
$66,$F7,$47,$01,$01,$00, { TEST WORD PTR [EDI+01],0001 }
|
||||
$F6,$47,$03,$01, { TEST BYTE PTR [EDI+03],01 }
|
||||
$66,$F7,$47,$FF,$01,$00, { TEST WORD PTR [EDI-01],0001 }
|
||||
$F6,$47,$FD,$01, { TEST BYTE PTR [EDI-03],01 }
|
||||
$66,$F7,$47,$04,$01,$00, { TEST WORD PTR [EDI+04],0001 }
|
||||
$F6,$47,$04,$01, { TEST BYTE PTR [EDI+04],01 }
|
||||
|
||||
$66,$F7,$07,$01,$00, { TEST WORD PTR [EDI],0001 }
|
||||
$F6,$07,$01, { TEST BYTE PTR [EDI],01 }
|
||||
$66,$F7,$47,$01,$01,$00, { TEST WORD PTR [EDI+01],0001 }
|
||||
$F6,$47,$03,$01, { TEST BYTE PTR [EDI+03],01 }
|
||||
$66,$F7,$47,$FF,$01,$00, { TEST WORD PTR [EDI-01],0001 }
|
||||
$F6,$47,$FD,$01, { TEST BYTE PTR [EDI-03],01 }
|
||||
$66,$F7,$47,$04,$01,$00, { TEST WORD PTR [EDI+04],0001 }
|
||||
$F6,$47,$04,$01, { TEST BYTE PTR [EDI+04],01 }
|
||||
|
||||
$66,$F7,$07,$01,$00, { TEST WORD PTR [EDI],0001 }
|
||||
$F6,$07,$01, { TEST BYTE PTR [EDI],01 }
|
||||
$66,$F7,$47,$05,$01,$00, { TEST WORD PTR [EDI+05],0001 }
|
||||
$F6,$47,$0F,$01, { TEST BYTE PTR [EDI+0F],01 }
|
||||
$66,$F7,$47,$FB,$01,$00, { TEST WORD PTR [EDI-05],0001 }
|
||||
$F6,$47,$F1,$01, { TEST BYTE PTR [EDI-0F],01 }
|
||||
$66,$F7,$47,$12,$01,$00, { TEST WORD PTR [EDI+12],0001 }
|
||||
$F6,$47,$0E,$01, { TEST BYTE PTR [EDI+0E],01 }
|
||||
|
||||
$F6,$07,$01, { TEST BYTE PTR [EDI],01 }
|
||||
$F6,$07,$01, { TEST BYTE PTR [EDI],01 }
|
||||
$F6,$47,$01,$01, { TEST BYTE PTR [EDI+01],01 }
|
||||
$F6,$47,$03,$01, { TEST BYTE PTR [EDI+03],01 }
|
||||
$F6,$47,$FF,$01, { TEST BYTE PTR [EDI-01],01 }
|
||||
$F6,$47,$FD,$01, { TEST BYTE PTR [EDI-03],01 }
|
||||
$F6,$47,$04,$01, { TEST BYTE PTR [EDI+04],01 }
|
||||
$F6,$47,$04,$01, { TEST BYTE PTR [EDI+04],01 }
|
||||
$F6,$07,$01, { TEST BYTE PTR [EDI],01 }
|
||||
$F6,$47,$01,$01, { TEST BYTE PTR [EDI+01],01 }
|
||||
|
||||
$66,$F7,$07,$01,$00, { TEST WORD PTR [EDI],0001 }
|
||||
$66,$F7,$07,$01,$00, { TEST WORD PTR [EDI],0001 }
|
||||
$66,$F7,$47,$01,$01,$00, { TEST WORD PTR [EDI+01],0001 }
|
||||
$66,$F7,$47,$03,$01,$00, { TEST WORD PTR [EDI+03],0001 }
|
||||
$66,$F7,$47,$FF,$01,$00, { TEST WORD PTR [EDI-01],0001 }
|
||||
$66,$F7,$47,$FD,$01,$00, { TEST WORD PTR [EDI-03],0001 }
|
||||
$66,$F7,$47,$04,$01,$00, { TEST WORD PTR [EDI+04],0001 }
|
||||
$66,$F7,$47,$04,$01,$00, { TEST WORD PTR [EDI+04],0001 }
|
||||
$66,$F7,$07,$01,$00, { TEST WORD PTR [EDI],0001 }
|
||||
$66,$F7,$47,$01,$01,$00 { TEST WORD PTR [EDI+01],0001 }
|
||||
);
|
||||
expect2: array [0..$42] of byte = (
|
||||
$F7,$07,$01,$00,$00,$00, { TEST DWORD PTR [EDI],00000001 }
|
||||
$F7,$47,$01,$01,$00,$00,$00, { TEST DWORD PTR [EDI+01],00000001 }
|
||||
|
||||
$F7,$07,$01,$00,$00,$00, { TEST DWORD PTR [EDI],00000001 }
|
||||
$F7,$07,$01,$00,$00,$00, { TEST DWORD PTR [EDI],00000001 }
|
||||
$F7,$47,$01,$01,$00,$00,$00, { TEST DWORD PTR [EDI+01],00000001 }
|
||||
$F7,$47,$03,$01,$00,$00,$00, { TEST DWORD PTR [EDI+03],00000001 }
|
||||
$F7,$47,$FF,$01,$00,$00,$00, { TEST DWORD PTR [EDI-01],00000001 }
|
||||
$F7,$47,$FD,$01,$00,$00,$00, { TEST DWORD PTR [EDI-03],00000001 }
|
||||
$F7,$47,$04,$01,$00,$00,$00, { TEST DWORD PTR [EDI+04],00000001 }
|
||||
$F7,$47,$04,$01,$00,$00,$00 { TEST DWORD PTR [EDI+04],00000001 }
|
||||
);
|
||||
|
||||
|
||||
procedure test1; assembler;
|
||||
asm
|
||||
test [edi+foo2], cval { test word ptr [edi], 1 }
|
||||
test byte ptr [edi+foo], cval { test byte ptr [edi], 1 }
|
||||
test [edi+foo.w], cval { test word ptr [edi+1], 1 }
|
||||
test [edi+foo.b2], cval { test byte ptr [edi+3], 1 }
|
||||
test [edi-foo.w], cval { test word ptr [edi-1], 1 }
|
||||
test [edi-foo.b2], cval { test byte ptr [edi-3], 1 }
|
||||
test [edi+foo.b2+foo.w], cval { test word ptr [edi+4], 1 }
|
||||
test [edi+foo.w+foo.b2], cval { test byte ptr [edi+4], 1 }
|
||||
|
||||
test [edi+foo2*1], cval { test word ptr [edi], 1 }
|
||||
test byte ptr [edi+foo*1], cval { test byte ptr [edi], 1 }
|
||||
test [edi+foo.w*1], cval { test word ptr [edi+1], 1 }
|
||||
test [edi+foo.b2*1], cval { test byte ptr [edi+3], 1 }
|
||||
test [edi-foo.w*1], cval { test word ptr [edi-1], 1 }
|
||||
test [edi-foo.b2*1], cval { test byte ptr [edi-3], 1 }
|
||||
test [edi+foo.b2*1+foo.w*1], cval { test word ptr [edi+4], 1 }
|
||||
test [edi+foo.w*1+foo.b2*1], cval { test byte ptr [edi+4], 1 }
|
||||
|
||||
test [edi+foo2*5], cval { test word ptr [edi], 1 }
|
||||
test byte ptr [edi+foo*5], cval { test byte ptr [edi], 1 }
|
||||
test [edi+foo.w*5], cval { test word ptr [edi+5], 1 }
|
||||
test [edi+foo.b2*5], cval { test byte ptr [edi+15], 1 }
|
||||
test [edi-foo.w*5], cval { test word ptr [edi-5], 1 }
|
||||
test [edi-foo.b2*5], cval { test byte ptr [edi-15], 1 }
|
||||
test [edi+foo.b2*5+foo.w*3], cval { test word ptr [edi+18], 1 }
|
||||
test [edi+foo.w*5+foo.b2*3], cval { test byte ptr [edi+14], 1 }
|
||||
|
||||
test byte ptr [edi+foo2], cval { test byte ptr [edi], 1 }
|
||||
test byte ptr [edi+foo], cval { test byte ptr [edi], 1 }
|
||||
test byte ptr [edi+foo.w], cval { test byte ptr [edi+1], 1 }
|
||||
test byte ptr [edi+foo.b2], cval { test byte ptr [edi+3], 1 }
|
||||
test byte ptr [edi-foo.w], cval { test byte ptr [edi-1], 1 }
|
||||
test byte ptr [edi-foo.b2], cval { test byte ptr [edi-3], 1 }
|
||||
test byte ptr [edi+foo.b2+foo.w], cval { test byte ptr [edi+4], 1 }
|
||||
test byte ptr [edi+foo.w+foo.b2], cval { test byte ptr [edi+4], 1 }
|
||||
test byte ptr [edi+foo32], cval { test byte ptr [edi], 1 }
|
||||
test byte ptr [edi+foo32_2.l], cval { test byte ptr [edi+1], 1 }
|
||||
|
||||
test word ptr [edi+foo2], cval { test word ptr [edi], 1 }
|
||||
test word ptr [edi+foo], cval { test word ptr [edi], 1 }
|
||||
test word ptr [edi+foo.w], cval { test word ptr [edi+1], 1 }
|
||||
test word ptr [edi+foo.b2], cval { test word ptr [edi+3], 1 }
|
||||
test word ptr [edi-foo.w], cval { test word ptr [edi-1], 1 }
|
||||
test word ptr [edi-foo.b2], cval { test word ptr [edi-3], 1 }
|
||||
test word ptr [edi+foo.b2+foo.w], cval { test word ptr [edi+4], 1 }
|
||||
test word ptr [edi+foo.w+foo.b2], cval { test word ptr [edi+4], 1 }
|
||||
test word ptr [edi+foo32], cval { test word ptr [edi], 1 }
|
||||
test word ptr [edi+foo32_2.l], cval { test word ptr [edi+1], 1 }
|
||||
end;
|
||||
|
||||
procedure test2; assembler;
|
||||
asm
|
||||
test [edi+foo32], cval { test dword ptr [edi], 1 }
|
||||
test [edi+foo32_2.l], cval { test dword ptr [edi+1], 1 }
|
||||
|
||||
test dword ptr [edi+foo2], cval { test dword ptr [edi], 1 }
|
||||
test dword ptr [edi+foo], cval { test dword ptr [edi], 1 }
|
||||
test dword ptr [edi+foo.w], cval { test dword ptr [edi+1], 1 }
|
||||
test dword ptr [edi+foo.b2], cval { test dword ptr [edi+3], 1 }
|
||||
test dword ptr [edi-foo.w], cval { test dword ptr [edi-1], 1 }
|
||||
test dword ptr [edi-foo.b2], cval { test dword ptr [edi-3], 1 }
|
||||
test dword ptr [edi+foo.b2+foo.w], cval { test dword ptr [edi+4], 1 }
|
||||
test dword ptr [edi+foo.w+foo.b2], cval { test dword ptr [edi+4], 1 }
|
||||
end;
|
||||
|
||||
procedure Error;
|
||||
begin
|
||||
Writeln('Error!');
|
||||
Halt(1);
|
||||
end;
|
||||
|
||||
function CompareCode(cp: CodePointer; dp: Pointer; sz: SizeInt): Boolean;
|
||||
begin
|
||||
CompareCode := CompareByte(cp^, dp^, sz) = 0;
|
||||
end;
|
||||
|
||||
begin
|
||||
if not CompareCode(CodePointer(@test1), @expect1, SizeOf(expect1)) then
|
||||
Error;
|
||||
if not CompareCode(CodePointer(@test2), @expect2, SizeOf(expect2)) then
|
||||
Error;
|
||||
|
||||
Writeln('Ok!');
|
||||
end.
|
Loading…
Reference in New Issue
Block a user