XmGetStringAddress

INT64 *__stdcall XmGetStringAddress(INT64 a1, UINT64 a2, UINT64 a3){
  __int64 v4; 
  int v5; 
  unsigned int v6; 
  VOID *v7; 

  v4 = (unsigned int)a2;
  v5 = *(_DWORD *)(a1 + 120) + 1;
  if( (*(_DWORD *)(a1 + 16) & 0x400) != 0 )
    v5 = -v5;
  if( *(_BYTE *)(a1 + 137) )
  {
    v6 = *(_DWORD *)(a1 + 4i64 * (unsigned int)a3 + 24);
    *(_DWORD *)(a1 + 4i64 * (unsigned int)a3 + 24) = v6 + v5;
  }
  else
  {
    v6 = *(unsigned __int16 *)(a1 + 4i64 * (unsigned int)a3 + 24);
    *(_WORD *)(a1 + 4i64 * (unsigned int)a3 + 24) = v5 + v6;
  }
  v7 = (VOID *)*(unsigned __int16 *)(a1 + 2 * v4 + 68);
  if( v6 > (unsigned int)v7 || v6 + *(_DWORD *)(a1 + 120) > (unsigned int)v7 )
    longjmp((unsigned __int64 *)(a1 + 160), (VOID *)0xE, v7);
  return x86BiosTranslateAddress(*(_WORD *)(a1 + 2 * v4 + 56), v6);
}

Referenced by:

XmCmpsOp
XmInsOp
XmLodsOp
XmMovsOp
XmOutsOp
XmScasOp
XmStosOp