Spec-Zone .ru
спецификации, руководства, описания, API
|
Содержание | Предыдущий | Следующий | Индекс | Спецификация Виртуальной машины JavaTM |
Работа
Расширьте индекс локальной переменной на дополнительные байты
Формат 1
широкий <код операции> indexbyte1 indexbyte2
где <код операции> является одним из iload, fload, aload, lload, dload, istore, fstore, astore, lstore, dstore, или мочить
Формат 2
широкий iinc indexbyte1 indexbyte2 constbyte1 constbyte2
Формы
широкий = 196 (0xc4)
Стек операнда
То же самое как измененная инструкция
Описание
Широкая инструкция изменяет поведение другой инструкции. Это берет один из двух форматов, в зависимости от изменяемой инструкции. Первая форма широкой инструкции изменяет одну из инструкций iload, fload, aload, lload, dload, istore, fstore, astore, lstore, dstore, или мочить. Вторая форма применяется только к iinc инструкции.
В любом случае сам широкий код операции сопровождается в скомпилированном коде кодом операции широкой инструкции, изменяет. В любой форме два байта без знака indexbyte1 и indexbyte2 следуют за измененным кодом операции и собираются в 16-разрядный индекс без знака к локальной переменной в текущем фрейме (§3.6), где значение индекса
(indexbyte1 << 8) | indexbyte2. Расчетный индекс должен быть индексом в массив локальной переменной текущего фрейма. Где широкая инструкция изменяет lload, dload, lstore, или dstore инструкцию, индекс после расчетного индекса (индекс + 1) должен также быть индексом в массив локальной переменной. Во второй форме два непосредственных байта без знака constbyte1 и constbyte2 следуют за indexbyte1 и indexbyte2 в потоке кода. Те байты также собираются в 16-разрядную константу со знаком, где константа (constbyte1 << 8) | constbyte2.
Расширенный байт-код работает как нормальный, за исключением использования того, чем шире индексируют и, в случае второй формы, тем больший инкрементный диапазон.
Примечания
Хотя мы говорим, что широкий "изменяет поведение другой инструкции," широкая инструкция эффективно обрабатывает байты, составляющие измененную инструкцию как операнды, денатурируя встроенную инструкцию в процессе. В случае измененной iinc инструкции один из логических операндов iinc не даже при нормальном смещении из кода операции. Встроенная инструкция никогда не должна выполняться непосредственно; его код операции никогда не должен быть целью любой инструкции передачи управления.
Содержание | Предыдущий | Следующий | Индекс
Спецификация Виртуальной машины JavaTM
Авторское право © Sun Microsystems, Inc 1999 года. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления к jvm@java.sun.com