{ %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.