mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-19 14:19:31 +02:00
* new bug
This commit is contained in:
parent
c9f22afb8d
commit
7d7e89d7d4
178
tests/webtbs/tw3577.pp
Normal file
178
tests/webtbs/tw3577.pp
Normal file
@ -0,0 +1,178 @@
|
||||
{ %cpu=i386 }
|
||||
|
||||
{ Source provided for Free Pascal Bug Report 3577 }
|
||||
{ Submitted by "Simon Kissel" on 2005-01-19 }
|
||||
{ e-mail: scamp@untergrund.net }
|
||||
|
||||
{$mode delphi}
|
||||
|
||||
procedure IntCopy16;
|
||||
asm
|
||||
MOV EAX,[ESI]
|
||||
MOV [EDI],EAX
|
||||
MOV EAX,[ESI+4]
|
||||
MOV [EDI+4],EAX
|
||||
MOV EAX,[ESI+8]
|
||||
MOV [EDI+8],EAX
|
||||
MOV EAX,[ESI+12]
|
||||
MOV [EDI+12],EAX
|
||||
MOV EAX,[ESI+16]
|
||||
MOV [EDI+16],EAX
|
||||
MOV EAX,[ESI+20]
|
||||
MOV [EDI+20],EAX
|
||||
MOV EAX,[ESI+24]
|
||||
MOV [EDI+24],EAX
|
||||
MOV EAX,[ESI+28]
|
||||
MOV [EDI+28],EAX
|
||||
MOV EAX,[ESI+32]
|
||||
MOV [EDI+32],EAX
|
||||
MOV EAX,[ESI+36]
|
||||
MOV [EDI+36],EAX
|
||||
MOV EAX,[ESI+40]
|
||||
MOV [EDI+40],EAX
|
||||
MOV EAX,[ESI+44]
|
||||
MOV [EDI+44],EAX
|
||||
MOV EAX,[ESI+48]
|
||||
MOV [EDI+48],EAX
|
||||
MOV EAX,[ESI+52]
|
||||
MOV [EDI+52],EAX
|
||||
MOV EAX,[ESI+56]
|
||||
MOV [EDI+56],EAX
|
||||
MOV EAX,[ESI+60]
|
||||
MOV [EDI+60],EAX
|
||||
end;
|
||||
|
||||
procedure Q_CopyMem(Source, Dest: Pointer; L: Cardinal);
|
||||
asm
|
||||
PUSH EDI
|
||||
PUSH ESI
|
||||
MOV EDI,EDX
|
||||
MOV EDX,ECX
|
||||
MOV ESI,EAX
|
||||
TEST EDI,3
|
||||
JNE @@cl
|
||||
SHR ECX,2
|
||||
AND EDX,3
|
||||
CMP ECX,16
|
||||
JBE @@cw0
|
||||
@@lp0: CALL IntCopy16
|
||||
ADD ESI,64
|
||||
SUB ECX,16
|
||||
ADD EDI,64
|
||||
CMP ECX,16
|
||||
JA @@lp0
|
||||
@@cw0: JMP DWORD PTR @@wV[ECX*4]
|
||||
@@cl: MOV EAX,EDI
|
||||
MOV EDX,3
|
||||
SUB ECX,4
|
||||
JB @@bc
|
||||
AND EAX,3
|
||||
ADD ECX,EAX
|
||||
JMP DWORD PTR @@lV[EAX*4-4]
|
||||
@@bc: JMP DWORD PTR @@tV[ECX*4+16]
|
||||
@@lV: DD @@l1, @@l2, @@l3
|
||||
@@l1: AND EDX,ECX
|
||||
MOV AL,[ESI]
|
||||
MOV [EDI],AL
|
||||
MOV AL,[ESI+1]
|
||||
MOV [EDI+1],AL
|
||||
MOV AL,[ESI+2]
|
||||
SHR ECX,2
|
||||
MOV [EDI+2],AL
|
||||
ADD ESI,3
|
||||
ADD EDI,3
|
||||
CMP ECX,16
|
||||
JBE @@cw1
|
||||
@@lp1: CALL IntCopy16
|
||||
ADD ESI,64
|
||||
SUB ECX,16
|
||||
ADD EDI,64
|
||||
CMP ECX,16
|
||||
JA @@lp1
|
||||
@@cw1: JMP DWORD PTR @@wV[ECX*4]
|
||||
@@l2: AND EDX,ECX
|
||||
MOV AL,[ESI]
|
||||
MOV [EDI],AL
|
||||
MOV AL,[ESI+1]
|
||||
SHR ECX,2
|
||||
MOV [EDI+1],AL
|
||||
ADD ESI,2
|
||||
ADD EDI,2
|
||||
CMP ECX,16
|
||||
JBE @@cw2
|
||||
@@lp2: CALL IntCopy16
|
||||
ADD ESI,64
|
||||
SUB ECX,16
|
||||
ADD EDI,64
|
||||
CMP ECX,16
|
||||
JA @@lp2
|
||||
@@cw2: JMP DWORD PTR @@wV[ECX*4]
|
||||
@@l3: AND EDX,ECX
|
||||
MOV AL,[ESI]
|
||||
MOV [EDI],AL
|
||||
INC ESI
|
||||
SHR ECX,2
|
||||
INC EDI
|
||||
CMP ECX,16
|
||||
JBE @@cw3
|
||||
@@lp3: CALL IntCopy16
|
||||
ADD ESI,64
|
||||
SUB ECX,16
|
||||
ADD EDI,64
|
||||
CMP ECX,16
|
||||
JA @@lp3
|
||||
@@cw3: JMP DWORD PTR @@wV[ECX*4]
|
||||
@@wV: DD @@w0, @@w1, @@w2, @@w3
|
||||
DD @@w4, @@w5, @@w6, @@w7
|
||||
DD @@w8, @@w9, @@w10, @@w11
|
||||
DD @@w12, @@w13, @@w14, @@w15
|
||||
DD @@w16
|
||||
@@w16: MOV EAX,[ESI+ECX*4-64]
|
||||
MOV [EDI+ECX*4-64],EAX
|
||||
@@w15: MOV EAX,[ESI+ECX*4-60]
|
||||
MOV [EDI+ECX*4-60],EAX
|
||||
@@w14: MOV EAX,[ESI+ECX*4-56]
|
||||
MOV [EDI+ECX*4-56],EAX
|
||||
@@w13: MOV EAX,[ESI+ECX*4-52]
|
||||
MOV [EDI+ECX*4-52],EAX
|
||||
@@w12: MOV EAX,[ESI+ECX*4-48]
|
||||
MOV [EDI+ECX*4-48],EAX
|
||||
@@w11: MOV EAX,[ESI+ECX*4-44]
|
||||
MOV [EDI+ECX*4-44],EAX
|
||||
@@w10: MOV EAX,[ESI+ECX*4-40]
|
||||
MOV [EDI+ECX*4-40],EAX
|
||||
@@w9: MOV EAX,[ESI+ECX*4-36]
|
||||
MOV [EDI+ECX*4-36],EAX
|
||||
@@w8: MOV EAX,[ESI+ECX*4-32]
|
||||
MOV [EDI+ECX*4-32],EAX
|
||||
@@w7: MOV EAX,[ESI+ECX*4-28]
|
||||
MOV [EDI+ECX*4-28],EAX
|
||||
@@w6: MOV EAX,[ESI+ECX*4-24]
|
||||
MOV [EDI+ECX*4-24],EAX
|
||||
@@w5: MOV EAX,[ESI+ECX*4-20]
|
||||
MOV [EDI+ECX*4-20],EAX
|
||||
@@w4: MOV EAX,[ESI+ECX*4-16]
|
||||
MOV [EDI+ECX*4-16],EAX
|
||||
@@w3: MOV EAX,[ESI+ECX*4-12]
|
||||
MOV [EDI+ECX*4-12],EAX
|
||||
@@w2: MOV EAX,[ESI+ECX*4-8]
|
||||
MOV [EDI+ECX*4-8],EAX
|
||||
@@w1: MOV EAX,[ESI+ECX*4-4]
|
||||
MOV [EDI+ECX*4-4],EAX
|
||||
SHL ECX,2
|
||||
ADD ESI,ECX
|
||||
ADD EDI,ECX
|
||||
@@w0: JMP DWORD PTR @@tV[EDX*4]
|
||||
@@tV: DD @@t0, @@t1, @@t2, @@t3
|
||||
@@t3: MOV AL,[ESI+2]
|
||||
MOV [EDI+2],AL
|
||||
@@t2: MOV AL,[ESI+1]
|
||||
MOV [EDI+1],AL
|
||||
@@t1: MOV AL,[ESI]
|
||||
MOV [EDI],AL
|
||||
@@t0: POP ESI
|
||||
POP EDI
|
||||
end;
|
||||
|
||||
begin
|
||||
end.
|
Loading…
Reference in New Issue
Block a user