|
@@ -0,0 +1,43 @@
|
|
|
+{ %cpu=i386,x86_64 }
|
|
|
+{ %norun }
|
|
|
+{$goto on}
|
|
|
+var
|
|
|
+{$ifdef cpux86_64}
|
|
|
+ a : array[0..31] of byte =
|
|
|
+ ($0F,$C1,$C6,$66,$0F,$C1,$C6,$0F,$C0,$D8,$0F,$C1,$34,$24,$66,$0F,$C1,$34,$24,
|
|
|
+ $0F,$C0,$04,$24,$48,$0F,$C1,$C6,$48,$0F,$C1,$04,$24);
|
|
|
+{$else cpux86_64}
|
|
|
+ a : array[0..22] of byte =
|
|
|
+ ($0f,$c1,$c6,$66,$0f,$c1,$c6,$0f,$c0,$d8,$0f,$c1,$34,$24,$66,$0f,$c1,$34,$24,
|
|
|
+ $0f,$c0,$04,$24);
|
|
|
+{$endif cpux86_64}
|
|
|
+
|
|
|
+
|
|
|
+var
|
|
|
+ p : pointer;
|
|
|
+ i : longint;
|
|
|
+label
|
|
|
+ l;
|
|
|
+begin
|
|
|
+l:
|
|
|
+ asm
|
|
|
+ xaddl %eax,%esi
|
|
|
+ xaddw %ax,%si
|
|
|
+ xaddb %bl,%al
|
|
|
+{$ifdef cpux86_64}
|
|
|
+ xaddl %esi,(%rsp)
|
|
|
+ xaddw %si,(%rsp)
|
|
|
+ xaddb %al,(%rsp)
|
|
|
+ xaddq %rax,%rsi
|
|
|
+ xaddq %rax,(%rsp)
|
|
|
+{$else cpux86_64}
|
|
|
+ xaddl %esi,(%esp)
|
|
|
+ xaddw %si,(%esp)
|
|
|
+ xaddb %al,(%esp)
|
|
|
+{$endif cpux86_64}
|
|
|
+ end;
|
|
|
+ for i:=low(a) to high(a) do
|
|
|
+ if pbyte(@l+i)^<>a[i] then
|
|
|
+ halt(1);
|
|
|
+ writeln('ok');
|
|
|
+end.
|