I've got something really weird.
Here is MWE:
\documentclass[a4paper,oneside]{book}
\usepackage[english,russian]{babel}
\usepackage{inputenc}
\usepackage{listings}
\usepackage{fontspec}
% fonts
\setmonofont{Droid Sans Mono}
\lstset{
basicstyle=\ttfamily\small,
columns=fullflexible,keepspaces,
inputencoding=utf8
}
\begin{document}
\begin{lstlisting}
; sign-extend input 32-bit value to 64-bit
; расширить входное 32-битное значение до 64-битного
; (shift is arithmetical)
; (арифметический сдвиг)
\end{lstlisting}
\end{document}
The file is encoded in UTF-8 encoding. Here is russian text interleaved with english. I'm running xelatex test.tex and here is PDF screenshot I've got:

As you may see, english text is fine, but as for russian one, numbers 32 and 64 are somewhat swapped at second line and also left bracket is at wrong position at line 4.
But why?
I've tried to move the text into external file and include it with \lstinputlisting, but result is the same.
