summaryrefslogtreecommitdiff
path: root/tests/webtbs/tw1327.pp
blob: 3dd6dc275063370eda459ee0cc18f2c720fd12be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
{ %CPU=i386 }
{ Source provided for Free Pascal Bug Report 1327 }
{ Submitted by "Fernando Oscar Schmitt" on  2001-01-08 }
{ e-mail: pulp@cpovo.net }
{NOT to execute! ONLY for disassemble!}

{$asmmode intel}

procedure NotToExecute;
begin
  asm
    lea eax,[ebx+1*ecx]
    mov ebx,[ecx+eax*2]
    add ecx,[4*eax+ebx]
    sub edx,[esi*8+edi]

    adc eax,[ebx+1*ecx+100000]
    sbb ebx,[ecx+eax*2+200000]
    movzx ecx,byte ptr [4*eax+ebx+400000]
    movsx edx,word ptr [esi*8+edi+800000]

    and [2*ecx],eax
    xor [edx*4],ebx

    or [2*ecx+20],eax
    not dword ptr [edx*4+40]
  end;
end;

const
  has_error : boolean = false;

procedure test;
var
  x,y : array[0..5] of longint;
  i : longint;
  begin
    for i:=0 to 5 do
      begin
        x[i]:=6*i;
        y[i]:=5*i;
      end;
    asm
      lea edi,x
      lea esi,y
      mov ecx,0
    @LLloop:
      mov ebx,[edi+4*ecx]
      sub ebx,[4*ecx+esi]
      mov [edi+4*ecx],ebx
      inc ecx
      cmp ecx,6
      jne  @LLloop
    end;
    for i:=0 to 5 do
      if x[i]<>i then
        has_error:=true;
  end;

begin
  test;
  if has_error then
    begin
      Writeln('bug 1327 is not fixed');
      Halt(1);
    end;
end.