blob: 5a5940b7267cd7567bc7f76b3a589b11a9fb6423 [file] [log] [blame]
# Copyright (C) 2007 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Bytecode definition file
#
# One line per instruction format family. Each line consists of a
# series of instruction formats that all take (potentially) compatible
# arguments. The order is the preferred order (most to least
# preferable) of formats, when more than one opcode could be used for
# a given instruction's arguments.
#
# Note: The family that starts with 12x has a mix of both two- and
# three- register formats. This is because some of the two-register
# opcodes effectively take three, with a destination and two sources
# where the destination and one of the sources have to be the same.
format 10t 20t 30t
format 10x
format 11n 21s 21h 31i 51l
format 11x
format 12x 22x 23x 32x 33x # See note, above.
format 21c 31c 41c
format 21t 31t
format 22b 22s 32s
format 22c 52c
format 22t
format 35c 3rc 5rc
# One line per opcode. Columns are:
# hex for opcode
# format
# has result register (y/n)
# opcode name
op 00 10x n nop
op 01 12x y move
op 02 22x y move/from16
op 03 32x y move/16
op 04 12x y move-wide
op 05 22x y move-wide/from16
op 06 32x y move-wide/16
op 07 12x y move-object
op 08 22x y move-object/from16
op 09 32x y move-object/16
op 0a 11x y move-result
op 0b 11x y move-result-wide
op 0c 11x y move-result-object
op 0d 11x y move-exception
op 0e 10x n return-void
op 0f 11x n return
op 10 11x n return-wide
op 11 11x n return-object
op 12 11n y const/4
op 13 21s y const/16
op 14 31i y const
op 15 21h y const/high16
op 16 21s y const-wide/16
op 17 31i y const-wide/32
op 18 51l y const-wide
op 19 21h y const-wide/high16
op 1a 21c y const-string
op 1b 31c y const-string/jumbo
op 1c 21c y const-class
op 1d 11x n monitor-enter
op 1e 11x n monitor-exit
op 1f 21c y check-cast
op 20 22c y instance-of
op 21 12x y array-length
op 22 21c y new-instance
op 23 22c y new-array
op 24 35c n filled-new-array
op 25 3rc n filled-new-array/range
op 26 31t n fill-array-data
op 27 11x n throw
op 28 10t n goto
op 29 20t n goto/16
op 2a 30t n goto/32
op 2b 31t n packed-switch
op 2c 31t n sparse-switch
op 2d 23x y cmpl-float
op 2e 23x y cmpg-float
op 2f 23x y cmpl-double
op 30 23x y cmpg-double
op 31 23x y cmp-long
op 32 22t n if-eq
op 33 22t n if-ne
op 34 22t n if-lt
op 35 22t n if-ge
op 36 22t n if-gt
op 37 22t n if-le
op 38 21t n if-eqz
op 39 21t n if-nez
op 3a 21t n if-ltz
op 3b 21t n if-gez
op 3c 21t n if-gtz
op 3d 21t n if-lez
# unused: op 3e
# unused: op 3f
# unused: op 40
# unused: op 41
# unused: op 42
# unused: op 43
op 44 23x y aget
op 45 23x y aget-wide
op 46 23x y aget-object
op 47 23x y aget-boolean
op 48 23x y aget-byte
op 49 23x y aget-char
op 4a 23x y aget-short
op 4b 23x n aput
op 4c 23x n aput-wide
op 4d 23x n aput-object
op 4e 23x n aput-boolean
op 4f 23x n aput-byte
op 50 23x n aput-char
op 51 23x n aput-short
op 52 22c y iget
op 53 22c y iget-wide
op 54 22c y iget-object
op 55 22c y iget-boolean
op 56 22c y iget-byte
op 57 22c y iget-char
op 58 22c y iget-short
op 59 22c n iput
op 5a 22c n iput-wide
op 5b 22c n iput-object
op 5c 22c n iput-boolean
op 5d 22c n iput-byte
op 5e 22c n iput-char
op 5f 22c n iput-short
op 60 21c y sget
op 61 21c y sget-wide
op 62 21c y sget-object
op 63 21c y sget-boolean
op 64 21c y sget-byte
op 65 21c y sget-char
op 66 21c y sget-short
op 67 21c n sput
op 68 21c n sput-wide
op 69 21c n sput-object
op 6a 21c n sput-boolean
op 6b 21c n sput-byte
op 6c 21c n sput-char
op 6d 21c n sput-short
op 6e 35c n invoke-virtual
op 6f 35c n invoke-super
op 70 35c n invoke-direct
op 71 35c n invoke-static
op 72 35c n invoke-interface
# unused: op 73
op 74 3rc n invoke-virtual/range
op 75 3rc n invoke-super/range
op 76 3rc n invoke-direct/range
op 77 3rc n invoke-static/range
op 78 3rc n invoke-interface/range
# unused: op 79
# unused: op 7a
op 7b 12x y neg-int
op 7c 12x y not-int
op 7d 12x y neg-long
op 7e 12x y not-long
op 7f 12x y neg-float
op 80 12x y neg-double
op 81 12x y int-to-long
op 82 12x y int-to-float
op 83 12x y int-to-double
op 84 12x y long-to-int
op 85 12x y long-to-float
op 86 12x y long-to-double
op 87 12x y float-to-int
op 88 12x y float-to-long
op 89 12x y float-to-double
op 8a 12x y double-to-int
op 8b 12x y double-to-long
op 8c 12x y double-to-float
op 8d 12x y int-to-byte
op 8e 12x y int-to-char
op 8f 12x y int-to-short
op 90 23x y add-int
op 91 23x y sub-int
op 92 23x y mul-int
op 93 23x y div-int
op 94 23x y rem-int
op 95 23x y and-int
op 96 23x y or-int
op 97 23x y xor-int
op 98 23x y shl-int
op 99 23x y shr-int
op 9a 23x y ushr-int
op 9b 23x y add-long
op 9c 23x y sub-long
op 9d 23x y mul-long
op 9e 23x y div-long
op 9f 23x y rem-long
op a0 23x y and-long
op a1 23x y or-long
op a2 23x y xor-long
op a3 23x y shl-long
op a4 23x y shr-long
op a5 23x y ushr-long
op a6 23x y add-float
op a7 23x y sub-float
op a8 23x y mul-float
op a9 23x y div-float
op aa 23x y rem-float
op ab 23x y add-double
op ac 23x y sub-double
op ad 23x y mul-double
op ae 23x y div-double
op af 23x y rem-double
op b0 12x y add-int/2addr
op b1 12x y sub-int/2addr
op b2 12x y mul-int/2addr
op b3 12x y div-int/2addr
op b4 12x y rem-int/2addr
op b5 12x y and-int/2addr
op b6 12x y or-int/2addr
op b7 12x y xor-int/2addr
op b8 12x y shl-int/2addr
op b9 12x y shr-int/2addr
op ba 12x y ushr-int/2addr
op bb 12x y add-long/2addr
op bc 12x y sub-long/2addr
op bd 12x y mul-long/2addr
op be 12x y div-long/2addr
op bf 12x y rem-long/2addr
op c0 12x y and-long/2addr
op c1 12x y or-long/2addr
op c2 12x y xor-long/2addr
op c3 12x y shl-long/2addr
op c4 12x y shr-long/2addr
op c5 12x y ushr-long/2addr
op c6 12x y add-float/2addr
op c7 12x y sub-float/2addr
op c8 12x y mul-float/2addr
op c9 12x y div-float/2addr
op ca 12x y rem-float/2addr
op cb 12x y add-double/2addr
op cc 12x y sub-double/2addr
op cd 12x y mul-double/2addr
op ce 12x y div-double/2addr
op cf 12x y rem-double/2addr
op d0 22s y add-int/lit16
op d1 22s y rsub-int
op d2 22s y mul-int/lit16
op d3 22s y div-int/lit16
op d4 22s y rem-int/lit16
op d5 22s y and-int/lit16
op d6 22s y or-int/lit16
op d7 22s y xor-int/lit16
op d8 22b y add-int/lit8
op d9 22b y rsub-int/lit8
op da 22b y mul-int/lit8
op db 22b y div-int/lit8
op dc 22b y rem-int/lit8
op dd 22b y and-int/lit8
op de 22b y or-int/lit8
op df 22b y xor-int/lit8
op e0 22b y shl-int/lit8
op e1 22b y shr-int/lit8
op e2 22b y ushr-int/lit8
# unused: op e3..fe
op 00ff 41c y const-class/jumbo
op 01ff 41c n check-cast/jumbo
op 02ff 52c y instance-of/jumbo
op 03ff 41c y new-instance/jumbo
op 04ff 52c y new-array/jumbo
op 05ff 5rc n filled-new-array/jumbo
op 06ff 52c y iget/jumbo
op 07ff 52c y iget-wide/jumbo
op 08ff 52c y iget-object/jumbo
op 09ff 52c y iget-boolean/jumbo
op 0aff 52c y iget-byte/jumbo
op 0bff 52c y iget-char/jumbo
op 0cff 52c y iget-short/jumbo
op 0dff 52c n iput/jumbo
op 0eff 52c n iput-wide/jumbo
op 0fff 52c n iput-object/jumbo
op 10ff 52c n iput-boolean/jumbo
op 11ff 52c n iput-byte/jumbo
op 12ff 52c n iput-char/jumbo
op 13ff 52c n iput-short/jumbo
op 14ff 41c y sget/jumbo
op 15ff 41c y sget-wide/jumbo
op 16ff 41c y sget-object/jumbo
op 17ff 41c y sget-boolean/jumbo
op 18ff 41c y sget-byte/jumbo
op 19ff 41c y sget-char/jumbo
op 1aff 41c y sget-short/jumbo
op 1bff 41c n sput/jumbo
op 1cff 41c n sput-wide/jumbo
op 1dff 41c n sput-object/jumbo
op 1eff 41c n sput-boolean/jumbo
op 1fff 41c n sput-byte/jumbo
op 20ff 41c n sput-char/jumbo
op 21ff 41c n sput-short/jumbo
op 22ff 5rc n invoke-virtual/jumbo
op 23ff 5rc n invoke-super/jumbo
op 24ff 5rc n invoke-direct/jumbo
op 25ff 5rc n invoke-static/jumbo
op 26ff 5rc n invoke-interface/jumbo
# unused: op 27ff..ffff