define @Menuet@StrLen$qpxc
  push edi
  cld
  mov  edi,[esp+8]
  mov  ecx,-1
  xor  al,al
  repnz scas byte [edi]
  not  ecx
  lea  eax,[ecx-1]
  pop  edi
  ret
enddef

define @Menuet@StrCopy$qpcpxc
  push esi
  push edi
  cld
  mov  edi,[esp+16]
  mov  ecx,-1
  mov  esi,edi
  xor  al,al
  repnz scas byte [edi]
  not  ecx
  mov  edi,[esp+12]
  mov  edx,ecx
  mov  eax,edi
  shr  ecx,2
  rep movs dword [edi],[esi]
  mov  ecx,edx
  and  ecx,3
  rep movs byte [edi],[esi]
  pop  edi
  pop  esi
  ret
enddef

define @Menuet@MemCopy$qpvpxvui
  push esi
  push edi
  cld
  mov  edi,[esp+12]
  mov  eax,edi
  mov  ecx,[esp+20]
  mov  esi,[esp+16]
  mov  edx,ecx
  shr  ecx,2
  rep movs dword [edi],[esi]
  mov  ecx,edx
  and  ecx,3
  rep movs byte [edi],[esi]
  pop  edi
  pop  esi
  ret
enddef

define @Menuet@MemSet$qpvcui
  push edi
  cld
  mov  edi,[esp+8]
  mov  al,[esp+12]
  mov  ah,al
  mov  dx,ax
  shl  eax,16
  mov  ax,dx
  mov  ecx,[esp+16]
  mov  edx,ecx
  shr  ecx,2
  rep stos dword [edi]
  mov  ecx,edx
  and  ecx,3
  rep stos byte [edi]
  pop  edi
  mov  eax,[esp+4]
  ret
enddef

define __ftol
  sub  esp,12
  wait
  fstcw word [esp+8]
  wait
  mov  al,[esp+9]
  or   byte [esp+9],0x0c
  fldcw word [esp+8]
  fistp qword [esp]
  mov  [esp+9],al
  fldcw word [esp+8]
  mov  eax,[esp]
  mov  edx,[esp+4]
  add  esp,12
  ret
enddef

define @Menuet@Floor$qd
  fld  qword [esp+4]
  mov  ax,[esp+10]
  shl  ax,1
  cmp  ax,0x8680
  ja   Menuet_floor_end
  mov  ch,4
  sub  esp,2
  wait
  fstcw word [esp]
  mov  ax,0xf3ff
  wait
  mov  dx,[esp]
  and  ax,dx
  or   ah,ch
  mov  [esp],ax
  fldcw word [esp]
  frndint
  mov  [esp],dx
  fldcw word [esp]
  add  esp,2
Menuet_floor_end:
  ret
enddef