blob: 2d39272b45e185ff7e7c17182a44484da7ac9f79 [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
# opcode name
# format
# has result register; one of:
# y
# n
# index type; one of:
# none
# varies
# type-ref
# string-ref
# method-ref
# field-ref
# inline-method
# vtable-offset
# field-offset
# flags; pipe-combined combo of one or more of:
# optimized -- optimized; not to be included in unoptimized dex files
# branch -- might branch to an address
# continue -- might continue to the next address in sequence
# switch -- is a switch
# unconditional -- is an unconditional branch
# throw -- might throw an exception
# return -- is a return from method
# invoke -- is a method invoke
op 00 nop 10x n none continue
op 01 move 12x y none continue
op 02 move/from16 22x y none continue
op 03 move/16 32x y none continue
op 04 move-wide 12x y none continue
op 05 move-wide/from16 22x y none continue
op 06 move-wide/16 32x y none continue
op 07 move-object 12x y none continue
op 08 move-object/from16 22x y none continue
op 09 move-object/16 32x y none continue
op 0a move-result 11x y none continue
op 0b move-result-wide 11x y none continue
op 0c move-result-object 11x y none continue
op 0d move-exception 11x y none continue
op 0e return-void 10x n none return
op 0f return 11x n none return
op 10 return-wide 11x n none return
op 11 return-object 11x n none return
op 12 const/4 11n y none continue
op 13 const/16 21s y none continue
op 14 const 31i y none continue
op 15 const/high16 21h y none continue
op 16 const-wide/16 21s y none continue
op 17 const-wide/32 31i y none continue
op 18 const-wide 51l y none continue
op 19 const-wide/high16 21h y none continue
op 1a const-string 21c y string-ref continue|throw
op 1b const-string/jumbo 31c y string-ref continue|throw
op 1c const-class 21c y type-ref continue|throw
op 1d monitor-enter 11x n none continue|throw
op 1e monitor-exit 11x n none continue|throw
op 1f check-cast 21c y type-ref continue|throw
op 20 instance-of 22c y type-ref continue|throw
op 21 array-length 12x y none continue|throw
op 22 new-instance 21c y type-ref continue|throw
op 23 new-array 22c y type-ref continue|throw
op 24 filled-new-array 35c n type-ref continue|throw
op 25 filled-new-array/range 3rc n type-ref continue|throw
op 26 fill-array-data 31t n none continue
op 27 throw 11x n none throw
op 28 goto 10t n none branch|unconditional
op 29 goto/16 20t n none branch|unconditional
op 2a goto/32 30t n none branch|unconditional
op 2b packed-switch 31t n none continue|switch
op 2c sparse-switch 31t n none continue|switch
op 2d cmpl-float 23x y none continue
op 2e cmpg-float 23x y none continue
op 2f cmpl-double 23x y none continue
op 30 cmpg-double 23x y none continue
op 31 cmp-long 23x y none continue
op 32 if-eq 22t n none continue|branch
op 33 if-ne 22t n none continue|branch
op 34 if-lt 22t n none continue|branch
op 35 if-ge 22t n none continue|branch
op 36 if-gt 22t n none continue|branch
op 37 if-le 22t n none continue|branch
op 38 if-eqz 21t n none continue|branch
op 39 if-nez 21t n none continue|branch
op 3a if-ltz 21t n none continue|branch
op 3b if-gez 21t n none continue|branch
op 3c if-gtz 21t n none continue|branch
op 3d if-lez 21t n none continue|branch
# unused: op 3e..43
op 44 aget 23x y none continue|throw
op 45 aget-wide 23x y none continue|throw
op 46 aget-object 23x y none continue|throw
op 47 aget-boolean 23x y none continue|throw
op 48 aget-byte 23x y none continue|throw
op 49 aget-char 23x y none continue|throw
op 4a aget-short 23x y none continue|throw
op 4b aput 23x n none continue|throw
op 4c aput-wide 23x n none continue|throw
op 4d aput-object 23x n none continue|throw
op 4e aput-boolean 23x n none continue|throw
op 4f aput-byte 23x n none continue|throw
op 50 aput-char 23x n none continue|throw
op 51 aput-short 23x n none continue|throw
op 52 iget 22c y field-ref continue|throw
op 53 iget-wide 22c y field-ref continue|throw
op 54 iget-object 22c y field-ref continue|throw
op 55 iget-boolean 22c y field-ref continue|throw
op 56 iget-byte 22c y field-ref continue|throw
op 57 iget-char 22c y field-ref continue|throw
op 58 iget-short 22c y field-ref continue|throw
op 59 iput 22c n field-ref continue|throw
op 5a iput-wide 22c n field-ref continue|throw
op 5b iput-object 22c n field-ref continue|throw
op 5c iput-boolean 22c n field-ref continue|throw
op 5d iput-byte 22c n field-ref continue|throw
op 5e iput-char 22c n field-ref continue|throw
op 5f iput-short 22c n field-ref continue|throw
op 60 sget 21c y field-ref continue|throw
op 61 sget-wide 21c y field-ref continue|throw
op 62 sget-object 21c y field-ref continue|throw
op 63 sget-boolean 21c y field-ref continue|throw
op 64 sget-byte 21c y field-ref continue|throw
op 65 sget-char 21c y field-ref continue|throw
op 66 sget-short 21c y field-ref continue|throw
op 67 sput 21c n field-ref continue|throw
op 68 sput-wide 21c n field-ref continue|throw
op 69 sput-object 21c n field-ref continue|throw
op 6a sput-boolean 21c n field-ref continue|throw
op 6b sput-byte 21c n field-ref continue|throw
op 6c sput-char 21c n field-ref continue|throw
op 6d sput-short 21c n field-ref continue|throw
op 6e invoke-virtual 35c n method-ref continue|throw|invoke
op 6f invoke-super 35c n method-ref continue|throw|invoke
op 70 invoke-direct 35c n method-ref continue|throw|invoke
op 71 invoke-static 35c n method-ref continue|throw|invoke
op 72 invoke-interface 35c n method-ref continue|throw|invoke
# unused: op 73
op 74 invoke-virtual/range 3rc n method-ref continue|throw|invoke
op 75 invoke-super/range 3rc n method-ref continue|throw|invoke
op 76 invoke-direct/range 3rc n method-ref continue|throw|invoke
op 77 invoke-static/range 3rc n method-ref continue|throw|invoke
op 78 invoke-interface/range 3rc n method-ref continue|throw|invoke
# unused: op 79..7a
op 7b neg-int 12x y none continue
op 7c not-int 12x y none continue
op 7d neg-long 12x y none continue
op 7e not-long 12x y none continue
op 7f neg-float 12x y none continue
op 80 neg-double 12x y none continue
op 81 int-to-long 12x y none continue
op 82 int-to-float 12x y none continue
op 83 int-to-double 12x y none continue
op 84 long-to-int 12x y none continue
op 85 long-to-float 12x y none continue
op 86 long-to-double 12x y none continue
op 87 float-to-int 12x y none continue
op 88 float-to-long 12x y none continue
op 89 float-to-double 12x y none continue
op 8a double-to-int 12x y none continue
op 8b double-to-long 12x y none continue
op 8c double-to-float 12x y none continue
op 8d int-to-byte 12x y none continue
op 8e int-to-char 12x y none continue
op 8f int-to-short 12x y none continue
op 90 add-int 23x y none continue
op 91 sub-int 23x y none continue
op 92 mul-int 23x y none continue
op 93 div-int 23x y none continue|throw
op 94 rem-int 23x y none continue|throw
op 95 and-int 23x y none continue
op 96 or-int 23x y none continue
op 97 xor-int 23x y none continue
op 98 shl-int 23x y none continue
op 99 shr-int 23x y none continue
op 9a ushr-int 23x y none continue
op 9b add-long 23x y none continue
op 9c sub-long 23x y none continue
op 9d mul-long 23x y none continue
op 9e div-long 23x y none continue|throw
op 9f rem-long 23x y none continue|throw
op a0 and-long 23x y none continue
op a1 or-long 23x y none continue
op a2 xor-long 23x y none continue
op a3 shl-long 23x y none continue
op a4 shr-long 23x y none continue
op a5 ushr-long 23x y none continue
op a6 add-float 23x y none continue
op a7 sub-float 23x y none continue
op a8 mul-float 23x y none continue
op a9 div-float 23x y none continue
op aa rem-float 23x y none continue
op ab add-double 23x y none continue
op ac sub-double 23x y none continue
op ad mul-double 23x y none continue
op ae div-double 23x y none continue
op af rem-double 23x y none continue
op b0 add-int/2addr 12x y none continue
op b1 sub-int/2addr 12x y none continue
op b2 mul-int/2addr 12x y none continue
op b3 div-int/2addr 12x y none continue|throw
op b4 rem-int/2addr 12x y none continue|throw
op b5 and-int/2addr 12x y none continue
op b6 or-int/2addr 12x y none continue
op b7 xor-int/2addr 12x y none continue
op b8 shl-int/2addr 12x y none continue
op b9 shr-int/2addr 12x y none continue
op ba ushr-int/2addr 12x y none continue
op bb add-long/2addr 12x y none continue
op bc sub-long/2addr 12x y none continue
op bd mul-long/2addr 12x y none continue
op be div-long/2addr 12x y none continue|throw
op bf rem-long/2addr 12x y none continue|throw
op c0 and-long/2addr 12x y none continue
op c1 or-long/2addr 12x y none continue
op c2 xor-long/2addr 12x y none continue
op c3 shl-long/2addr 12x y none continue
op c4 shr-long/2addr 12x y none continue
op c5 ushr-long/2addr 12x y none continue
op c6 add-float/2addr 12x y none continue
op c7 sub-float/2addr 12x y none continue
op c8 mul-float/2addr 12x y none continue
op c9 div-float/2addr 12x y none continue
op ca rem-float/2addr 12x y none continue
op cb add-double/2addr 12x y none continue
op cc sub-double/2addr 12x y none continue
op cd mul-double/2addr 12x y none continue
op ce div-double/2addr 12x y none continue
op cf rem-double/2addr 12x y none continue
op d0 add-int/lit16 22s y none continue
op d1 rsub-int 22s y none continue
op d2 mul-int/lit16 22s y none continue
op d3 div-int/lit16 22s y none continue|throw
op d4 rem-int/lit16 22s y none continue|throw
op d5 and-int/lit16 22s y none continue
op d6 or-int/lit16 22s y none continue
op d7 xor-int/lit16 22s y none continue
op d8 add-int/lit8 22b y none continue
op d9 rsub-int/lit8 22b y none continue
op da mul-int/lit8 22b y none continue
op db div-int/lit8 22b y none continue|throw
op dc rem-int/lit8 22b y none continue|throw
op dd and-int/lit8 22b y none continue
op de or-int/lit8 22b y none continue
op df xor-int/lit8 22b y none continue
op e0 shl-int/lit8 22b y none continue
op e1 shr-int/lit8 22b y none continue
op e2 ushr-int/lit8 22b y none continue
# unused: op e3..fe
op 00ff const-class/jumbo 41c y type-ref continue|throw
op 01ff check-cast/jumbo 41c n type-ref continue|throw
op 02ff instance-of/jumbo 52c y type-ref continue|throw
op 03ff new-instance/jumbo 41c y type-ref continue|throw
op 04ff new-array/jumbo 52c y type-ref continue|throw
op 05ff filled-new-array/jumbo 5rc n type-ref continue|throw
op 06ff iget/jumbo 52c y field-ref continue|throw
op 07ff iget-wide/jumbo 52c y field-ref continue|throw
op 08ff iget-object/jumbo 52c y field-ref continue|throw
op 09ff iget-boolean/jumbo 52c y field-ref continue|throw
op 0aff iget-byte/jumbo 52c y field-ref continue|throw
op 0bff iget-char/jumbo 52c y field-ref continue|throw
op 0cff iget-short/jumbo 52c y field-ref continue|throw
op 0dff iput/jumbo 52c n field-ref continue|throw
op 0eff iput-wide/jumbo 52c n field-ref continue|throw
op 0fff iput-object/jumbo 52c n field-ref continue|throw
op 10ff iput-boolean/jumbo 52c n field-ref continue|throw
op 11ff iput-byte/jumbo 52c n field-ref continue|throw
op 12ff iput-char/jumbo 52c n field-ref continue|throw
op 13ff iput-short/jumbo 52c n field-ref continue|throw
op 14ff sget/jumbo 41c y field-ref continue|throw
op 15ff sget-wide/jumbo 41c y field-ref continue|throw
op 16ff sget-object/jumbo 41c y field-ref continue|throw
op 17ff sget-boolean/jumbo 41c y field-ref continue|throw
op 18ff sget-byte/jumbo 41c y field-ref continue|throw
op 19ff sget-char/jumbo 41c y field-ref continue|throw
op 1aff sget-short/jumbo 41c y field-ref continue|throw
op 1bff sput/jumbo 41c n field-ref continue|throw
op 1cff sput-wide/jumbo 41c n field-ref continue|throw
op 1dff sput-object/jumbo 41c n field-ref continue|throw
op 1eff sput-boolean/jumbo 41c n field-ref continue|throw
op 1fff sput-byte/jumbo 41c n field-ref continue|throw
op 20ff sput-char/jumbo 41c n field-ref continue|throw
op 21ff sput-short/jumbo 41c n field-ref continue|throw
op 22ff invoke-virtual/jumbo 5rc n method-ref continue|throw|invoke
op 23ff invoke-super/jumbo 5rc n method-ref continue|throw|invoke
op 24ff invoke-direct/jumbo 5rc n method-ref continue|throw|invoke
op 25ff invoke-static/jumbo 5rc n method-ref continue|throw|invoke
op 26ff invoke-interface/jumbo 5rc n method-ref continue|throw|invoke
# unused: op 27ff..ffff