Что означает «MSL» (сдвиг в единицах) в сборке arm64?

#assembly #bit-shift #arm64 #mnemonics

Вопрос:

В инструкции на ассемблере, такой как

 movi    v30.2S, #0x3c, msl #0x8
 

msl приведет к тому, что значение 0x3cff (значение сдвинуто влево, а единицы вставлены внизу) будет перемещено к цели, но что означает MSL? Например, LSL расшифровывается как «Логический сдвиг влево».

Комментарии:

1. Волшебный сдвиг влево… хотя, возможно, это был просто «модифицированный» сдвиг влево.

2. lsl это сдвиг влево с нулевым заполнением младших разрядов, в то время как » msl » -сдвиг влево с одним заполнением младших разрядов. Так что «измененный сдвиг влево» звучит разумно, но я еще не нашел его прописанным в официальной документации ARM.

3. На других процессорах, например на m68k, два вида сдвигов являются логическими и арифметическими. Возможно, M является математическим(al)?

4. @chexum: Для меня это звучит неправдоподобно, учитывая, что он делает. Нормальный сдвиг влево (сдвиг в нулях) умножается на 2 для чисел со знаком или без знака. Некоторые ISA, такие как x86, имеют мнемонические синонимы для арифметического и логического сдвига влево, но они используют один и тот же машинный код, потому что это одна и та же операция. РУКА действительно имеет логические и арифметические сдвиги вправо . Но этот MSL не является простой математической операцией. Это умножение на степень 2 и добавление единицы меньше, чем эта степень 2. т. е. x * 2^n (2^n-1)

Ответ №1:

Я не уверен на 100% в этом, но, основываясь на документации capstone, это может означать «Маскирующий сдвиг».

Единственное, в чем я сомневаюсь, это то, что в нем говорится lsl , что может означать» Logical shift lift «, а не» Logical shift left «, так что, может быть « Masking shift left «?

скриншот на случай, если он исчезнет

Комментарии:

1. Это сообщение в блоге , написанное сотрудником ARM, подтверждает это имя.