Sun, 16 Dec 2012 11:09:36 +0100
8005098: Provide isSynthesized() information on Attribute.Compound
Reviewed-by: jjg
jjg@255 | 1 | /* |
vromero@1428 | 2 | * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. |
jjg@255 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
jjg@255 | 4 | * |
jjg@255 | 5 | * This code is free software; you can redistribute it and/or modify it |
jjg@255 | 6 | * under the terms of the GNU General Public License version 2 only, as |
ohair@554 | 7 | * published by the Free Software Foundation. Oracle designates this |
jjg@255 | 8 | * particular file as subject to the "Classpath" exception as provided |
ohair@554 | 9 | * by Oracle in the LICENSE file that accompanied this code. |
jjg@255 | 10 | * |
jjg@255 | 11 | * This code is distributed in the hope that it will be useful, but WITHOUT |
jjg@255 | 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
jjg@255 | 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
jjg@255 | 14 | * version 2 for more details (a copy is included in the LICENSE file that |
jjg@255 | 15 | * accompanied this code). |
jjg@255 | 16 | * |
jjg@255 | 17 | * You should have received a copy of the GNU General Public License version |
jjg@255 | 18 | * 2 along with this work; if not, write to the Free Software Foundation, |
jjg@255 | 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
jjg@255 | 20 | * |
ohair@554 | 21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
ohair@554 | 22 | * or visit www.oracle.com if you need additional information or have any |
ohair@554 | 23 | * questions. |
jjg@255 | 24 | */ |
jjg@255 | 25 | |
jjg@255 | 26 | package com.sun.tools.classfile; |
jjg@255 | 27 | |
jjg@255 | 28 | import static com.sun.tools.classfile.Instruction.Kind.*; |
jjg@255 | 29 | import static com.sun.tools.classfile.Opcode.Set.*; |
jjg@255 | 30 | |
jjg@255 | 31 | /** |
jjh@972 | 32 | * See JVMS, chapter 6. |
jjg@255 | 33 | * |
jjg@255 | 34 | * <p>In addition to providing all the standard opcodes defined in JVMS, |
jjg@255 | 35 | * this class also provides legacy support for the PicoJava extensions. |
jjg@255 | 36 | * |
jjg@581 | 37 | * <p><b>This is NOT part of any supported API. |
jjg@581 | 38 | * If you write code that depends on this, you do so at your own risk. |
jjg@255 | 39 | * This code and its internal interfaces are subject to change or |
jjg@255 | 40 | * deletion without notice.</b> |
jjg@255 | 41 | */ |
jjg@255 | 42 | public enum Opcode { |
jjg@255 | 43 | NOP(0x0), |
jjg@255 | 44 | ACONST_NULL(0x1), |
jjg@255 | 45 | ICONST_M1(0x2), |
jjg@255 | 46 | ICONST_0(0x3), |
jjg@255 | 47 | ICONST_1(0x4), |
jjg@255 | 48 | ICONST_2(0x5), |
jjg@255 | 49 | ICONST_3(0x6), |
jjg@255 | 50 | ICONST_4(0x7), |
jjg@255 | 51 | ICONST_5(0x8), |
jjg@255 | 52 | LCONST_0(0x9), |
jjg@255 | 53 | LCONST_1(0xa), |
jjg@255 | 54 | FCONST_0(0xb), |
jjg@255 | 55 | FCONST_1(0xc), |
jjg@255 | 56 | FCONST_2(0xd), |
jjg@255 | 57 | DCONST_0(0xe), |
jjg@255 | 58 | DCONST_1(0xf), |
jjg@255 | 59 | BIPUSH(0x10, BYTE), |
jjg@255 | 60 | SIPUSH(0x11, SHORT), |
jjg@255 | 61 | LDC(0x12, CPREF), |
jjg@255 | 62 | LDC_W(0x13, CPREF_W), |
jjg@255 | 63 | LDC2_W(0x14, CPREF_W), |
jjg@255 | 64 | ILOAD(0x15, LOCAL), |
jjg@255 | 65 | LLOAD(0x16, LOCAL), |
jjg@255 | 66 | FLOAD(0x17, LOCAL), |
jjg@255 | 67 | DLOAD(0x18, LOCAL), |
jjg@255 | 68 | ALOAD(0x19, LOCAL), |
jjg@255 | 69 | ILOAD_0(0x1a), |
jjg@255 | 70 | ILOAD_1(0x1b), |
jjg@255 | 71 | ILOAD_2(0x1c), |
jjg@255 | 72 | ILOAD_3(0x1d), |
jjg@255 | 73 | LLOAD_0(0x1e), |
jjg@255 | 74 | LLOAD_1(0x1f), |
jjg@255 | 75 | LLOAD_2(0x20), |
jjg@255 | 76 | LLOAD_3(0x21), |
jjg@255 | 77 | FLOAD_0(0x22), |
jjg@255 | 78 | FLOAD_1(0x23), |
jjg@255 | 79 | FLOAD_2(0x24), |
jjg@255 | 80 | FLOAD_3(0x25), |
jjg@255 | 81 | DLOAD_0(0x26), |
jjg@255 | 82 | DLOAD_1(0x27), |
jjg@255 | 83 | DLOAD_2(0x28), |
jjg@255 | 84 | DLOAD_3(0x29), |
jjg@255 | 85 | ALOAD_0(0x2a), |
jjg@255 | 86 | ALOAD_1(0x2b), |
jjg@255 | 87 | ALOAD_2(0x2c), |
jjg@255 | 88 | ALOAD_3(0x2d), |
jjg@255 | 89 | IALOAD(0x2e), |
jjg@255 | 90 | LALOAD(0x2f), |
jjg@255 | 91 | FALOAD(0x30), |
jjg@255 | 92 | DALOAD(0x31), |
jjg@255 | 93 | AALOAD(0x32), |
jjg@255 | 94 | BALOAD(0x33), |
jjg@255 | 95 | CALOAD(0x34), |
jjg@255 | 96 | SALOAD(0x35), |
jjg@255 | 97 | ISTORE(0x36, LOCAL), |
jjg@255 | 98 | LSTORE(0x37, LOCAL), |
jjg@255 | 99 | FSTORE(0x38, LOCAL), |
jjg@255 | 100 | DSTORE(0x39, LOCAL), |
jjg@255 | 101 | ASTORE(0x3a, LOCAL), |
jjg@255 | 102 | ISTORE_0(0x3b), |
jjg@255 | 103 | ISTORE_1(0x3c), |
jjg@255 | 104 | ISTORE_2(0x3d), |
jjg@255 | 105 | ISTORE_3(0x3e), |
jjg@255 | 106 | LSTORE_0(0x3f), |
jjg@255 | 107 | LSTORE_1(0x40), |
jjg@255 | 108 | LSTORE_2(0x41), |
jjg@255 | 109 | LSTORE_3(0x42), |
jjg@255 | 110 | FSTORE_0(0x43), |
jjg@255 | 111 | FSTORE_1(0x44), |
jjg@255 | 112 | FSTORE_2(0x45), |
jjg@255 | 113 | FSTORE_3(0x46), |
jjg@255 | 114 | DSTORE_0(0x47), |
jjg@255 | 115 | DSTORE_1(0x48), |
jjg@255 | 116 | DSTORE_2(0x49), |
jjg@255 | 117 | DSTORE_3(0x4a), |
jjg@255 | 118 | ASTORE_0(0x4b), |
jjg@255 | 119 | ASTORE_1(0x4c), |
jjg@255 | 120 | ASTORE_2(0x4d), |
jjg@255 | 121 | ASTORE_3(0x4e), |
jjg@255 | 122 | IASTORE(0x4f), |
jjg@255 | 123 | LASTORE(0x50), |
jjg@255 | 124 | FASTORE(0x51), |
jjg@255 | 125 | DASTORE(0x52), |
jjg@255 | 126 | AASTORE(0x53), |
jjg@255 | 127 | BASTORE(0x54), |
jjg@255 | 128 | CASTORE(0x55), |
jjg@255 | 129 | SASTORE(0x56), |
jjg@255 | 130 | POP(0x57), |
jjg@255 | 131 | POP2(0x58), |
jjg@255 | 132 | DUP(0x59), |
jjg@255 | 133 | DUP_X1(0x5a), |
jjg@255 | 134 | DUP_X2(0x5b), |
jjg@255 | 135 | DUP2(0x5c), |
jjg@255 | 136 | DUP2_X1(0x5d), |
jjg@255 | 137 | DUP2_X2(0x5e), |
jjg@255 | 138 | SWAP(0x5f), |
jjg@255 | 139 | IADD(0x60), |
jjg@255 | 140 | LADD(0x61), |
jjg@255 | 141 | FADD(0x62), |
jjg@255 | 142 | DADD(0x63), |
jjg@255 | 143 | ISUB(0x64), |
jjg@255 | 144 | LSUB(0x65), |
jjg@255 | 145 | FSUB(0x66), |
jjg@255 | 146 | DSUB(0x67), |
jjg@255 | 147 | IMUL(0x68), |
jjg@255 | 148 | LMUL(0x69), |
jjg@255 | 149 | FMUL(0x6a), |
jjg@255 | 150 | DMUL(0x6b), |
jjg@255 | 151 | IDIV(0x6c), |
jjg@255 | 152 | LDIV(0x6d), |
jjg@255 | 153 | FDIV(0x6e), |
jjg@255 | 154 | DDIV(0x6f), |
jjg@255 | 155 | IREM(0x70), |
jjg@255 | 156 | LREM(0x71), |
jjg@255 | 157 | FREM(0x72), |
jjg@255 | 158 | DREM(0x73), |
jjg@255 | 159 | INEG(0x74), |
jjg@255 | 160 | LNEG(0x75), |
jjg@255 | 161 | FNEG(0x76), |
jjg@255 | 162 | DNEG(0x77), |
jjg@255 | 163 | ISHL(0x78), |
jjg@255 | 164 | LSHL(0x79), |
jjg@255 | 165 | ISHR(0x7a), |
jjg@255 | 166 | LSHR(0x7b), |
jjg@255 | 167 | IUSHR(0x7c), |
jjg@255 | 168 | LUSHR(0x7d), |
jjg@255 | 169 | IAND(0x7e), |
jjg@255 | 170 | LAND(0x7f), |
jjg@255 | 171 | IOR(0x80), |
jjg@255 | 172 | LOR(0x81), |
jjg@255 | 173 | IXOR(0x82), |
jjg@255 | 174 | LXOR(0x83), |
jjg@255 | 175 | IINC(0x84, LOCAL_BYTE), |
jjg@255 | 176 | I2L(0x85), |
jjg@255 | 177 | I2F(0x86), |
jjg@255 | 178 | I2D(0x87), |
jjg@255 | 179 | L2I(0x88), |
jjg@255 | 180 | L2F(0x89), |
jjg@255 | 181 | L2D(0x8a), |
jjg@255 | 182 | F2I(0x8b), |
jjg@255 | 183 | F2L(0x8c), |
jjg@255 | 184 | F2D(0x8d), |
jjg@255 | 185 | D2I(0x8e), |
jjg@255 | 186 | D2L(0x8f), |
jjg@255 | 187 | D2F(0x90), |
jjg@255 | 188 | I2B(0x91), |
jjg@255 | 189 | I2C(0x92), |
jjg@255 | 190 | I2S(0x93), |
jjg@255 | 191 | LCMP(0x94), |
jjg@255 | 192 | FCMPL(0x95), |
jjg@255 | 193 | FCMPG(0x96), |
jjg@255 | 194 | DCMPL(0x97), |
jjg@255 | 195 | DCMPG(0x98), |
jjg@255 | 196 | IFEQ(0x99, BRANCH), |
jjg@255 | 197 | IFNE(0x9a, BRANCH), |
jjg@255 | 198 | IFLT(0x9b, BRANCH), |
jjg@255 | 199 | IFGE(0x9c, BRANCH), |
jjg@255 | 200 | IFGT(0x9d, BRANCH), |
jjg@255 | 201 | IFLE(0x9e, BRANCH), |
jjg@255 | 202 | IF_ICMPEQ(0x9f, BRANCH), |
jjg@255 | 203 | IF_ICMPNE(0xa0, BRANCH), |
jjg@255 | 204 | IF_ICMPLT(0xa1, BRANCH), |
jjg@255 | 205 | IF_ICMPGE(0xa2, BRANCH), |
jjg@255 | 206 | IF_ICMPGT(0xa3, BRANCH), |
jjg@255 | 207 | IF_ICMPLE(0xa4, BRANCH), |
jjg@255 | 208 | IF_ACMPEQ(0xa5, BRANCH), |
jjg@255 | 209 | IF_ACMPNE(0xa6, BRANCH), |
jjg@255 | 210 | GOTO(0xa7, BRANCH), |
jjg@255 | 211 | JSR(0xa8, BRANCH), |
jjg@255 | 212 | RET(0xa9, LOCAL), |
jjg@255 | 213 | TABLESWITCH(0xaa, DYNAMIC), |
jjg@255 | 214 | LOOKUPSWITCH(0xab, DYNAMIC), |
jjg@255 | 215 | IRETURN(0xac), |
jjg@255 | 216 | LRETURN(0xad), |
jjg@255 | 217 | FRETURN(0xae), |
jjg@255 | 218 | DRETURN(0xaf), |
jjg@255 | 219 | ARETURN(0xb0), |
jjg@255 | 220 | RETURN(0xb1), |
jjg@255 | 221 | GETSTATIC(0xb2, CPREF_W), |
jjg@255 | 222 | PUTSTATIC(0xb3, CPREF_W), |
jjg@255 | 223 | GETFIELD(0xb4, CPREF_W), |
jjg@255 | 224 | PUTFIELD(0xb5, CPREF_W), |
jjg@255 | 225 | INVOKEVIRTUAL(0xb6, CPREF_W), |
jjg@255 | 226 | INVOKESPECIAL(0xb7, CPREF_W), |
jjg@255 | 227 | INVOKESTATIC(0xb8, CPREF_W), |
jjg@255 | 228 | INVOKEINTERFACE(0xb9, CPREF_W_UBYTE_ZERO), |
jrose@267 | 229 | INVOKEDYNAMIC(0xba, CPREF_W_UBYTE_ZERO), |
jjg@255 | 230 | NEW(0xbb, CPREF_W), |
jjg@255 | 231 | NEWARRAY(0xbc, ATYPE), |
jjg@255 | 232 | ANEWARRAY(0xbd, CPREF_W), |
jjg@255 | 233 | ARRAYLENGTH(0xbe), |
jjg@255 | 234 | ATHROW(0xbf), |
jjg@255 | 235 | CHECKCAST(0xc0, CPREF_W), |
jjg@255 | 236 | INSTANCEOF(0xc1, CPREF_W), |
jjg@255 | 237 | MONITORENTER(0xc2), |
jjg@255 | 238 | MONITOREXIT(0xc3), |
jjg@255 | 239 | // wide 0xc4 |
jjg@255 | 240 | MULTIANEWARRAY(0xc5, CPREF_W_UBYTE), |
jjg@255 | 241 | IFNULL(0xc6, BRANCH), |
jjg@255 | 242 | IFNONNULL(0xc7, BRANCH), |
jjg@255 | 243 | GOTO_W(0xc8, BRANCH_W), |
jjg@255 | 244 | JSR_W(0xc9, BRANCH_W), |
jjg@255 | 245 | // impdep 0xfe: PicoJava nonpriv |
jjg@255 | 246 | // impdep 0xff: Picojava priv |
jjg@255 | 247 | |
jjg@255 | 248 | // wide opcodes |
vromero@1428 | 249 | ILOAD_W(0xc415, WIDE_LOCAL), |
vromero@1428 | 250 | LLOAD_W(0xc416, WIDE_LOCAL), |
vromero@1428 | 251 | FLOAD_W(0xc417, WIDE_LOCAL), |
vromero@1428 | 252 | DLOAD_W(0xc418, WIDE_LOCAL), |
vromero@1428 | 253 | ALOAD_W(0xc419, WIDE_LOCAL), |
vromero@1428 | 254 | ISTORE_W(0xc436, WIDE_LOCAL), |
vromero@1428 | 255 | LSTORE_W(0xc437, WIDE_LOCAL), |
vromero@1428 | 256 | FSTORE_W(0xc438, WIDE_LOCAL), |
vromero@1428 | 257 | DSTORE_W(0xc439, WIDE_LOCAL), |
vromero@1428 | 258 | ASTORE_W(0xc43a, WIDE_LOCAL), |
vromero@1428 | 259 | IINC_W(0xc484, WIDE_LOCAL_SHORT), |
vromero@1428 | 260 | RET_W(0xc4a9, WIDE_LOCAL), |
jjg@255 | 261 | |
jjg@255 | 262 | // PicoJava nonpriv instructions |
jjg@255 | 263 | LOAD_UBYTE(PICOJAVA, 0xfe00), |
jjg@255 | 264 | LOAD_BYTE(PICOJAVA, 0xfe01), |
jjg@255 | 265 | LOAD_CHAR(PICOJAVA, 0xfe02), |
jjg@255 | 266 | LOAD_SHORT(PICOJAVA, 0xfe03), |
jjg@255 | 267 | LOAD_WORD(PICOJAVA, 0xfe04), |
jjg@255 | 268 | RET_FROM_SUB(PICOJAVA, 0xfe05), |
jjg@255 | 269 | LOAD_CHAR_OE(PICOJAVA, 0xfe0a), |
jjg@255 | 270 | LOAD_SHORT_OE(PICOJAVA, 0xfe0b), |
jjg@255 | 271 | LOAD_WORD_OE(PICOJAVA, 0xfe0c), |
jjg@255 | 272 | NCLOAD_UBYTE(PICOJAVA, 0xfe10), |
jjg@255 | 273 | NCLOAD_BYTE(PICOJAVA, 0xfe11), |
jjg@255 | 274 | NCLOAD_CHAR(PICOJAVA, 0xfe12), |
jjg@255 | 275 | NCLOAD_SHORT(PICOJAVA, 0xfe13), |
jjg@255 | 276 | NCLOAD_WORD(PICOJAVA, 0xfe14), |
jjg@255 | 277 | NCLOAD_CHAR_OE(PICOJAVA, 0xfe1a), |
jjg@255 | 278 | NCLOAD_SHORT_OE(PICOJAVA, 0xfe1b), |
jjg@255 | 279 | NCLOAD_WORD_OE(PICOJAVA, 0xfe1c), |
jjg@255 | 280 | CACHE_FLUSH(PICOJAVA, 0xfe1e), |
jjg@255 | 281 | STORE_BYTE(PICOJAVA, 0xfe20), |
jjg@255 | 282 | STORE_SHORT(PICOJAVA, 0xfe22), |
jjg@255 | 283 | STORE_WORD(PICOJAVA, 0xfe24), |
jjg@255 | 284 | STORE_SHORT_OE(PICOJAVA, 0xfe2a), |
jjg@255 | 285 | STORE_WORD_OE(PICOJAVA, 0xfe2c), |
jjg@255 | 286 | NCSTORE_BYTE(PICOJAVA, 0xfe30), |
jjg@255 | 287 | NCSTORE_SHORT(PICOJAVA, 0xfe32), |
jjg@255 | 288 | NCSTORE_WORD(PICOJAVA, 0xfe34), |
jjg@255 | 289 | NCSTORE_SHORT_OE(PICOJAVA, 0xfe3a), |
jjg@255 | 290 | NCSTORE_WORD_OE(PICOJAVA, 0xfe3c), |
jjg@255 | 291 | ZERO_LINE(PICOJAVA, 0xfe3e), |
jjg@255 | 292 | ENTER_SYNC_METHOD(PICOJAVA, 0xfe3f), |
jjg@255 | 293 | |
jjg@255 | 294 | // PicoJava priv instructions |
jjg@255 | 295 | PRIV_LOAD_UBYTE(PICOJAVA, 0xff00), |
jjg@255 | 296 | PRIV_LOAD_BYTE(PICOJAVA, 0xff01), |
jjg@255 | 297 | PRIV_LOAD_CHAR(PICOJAVA, 0xff02), |
jjg@255 | 298 | PRIV_LOAD_SHORT(PICOJAVA, 0xff03), |
jjg@255 | 299 | PRIV_LOAD_WORD(PICOJAVA, 0xff04), |
jjg@255 | 300 | PRIV_RET_FROM_TRAP(PICOJAVA, 0xff05), |
jjg@255 | 301 | PRIV_READ_DCACHE_TAG(PICOJAVA, 0xff06), |
jjg@255 | 302 | PRIV_READ_DCACHE_DATA(PICOJAVA, 0xff07), |
jjg@255 | 303 | PRIV_LOAD_CHAR_OE(PICOJAVA, 0xff0a), |
jjg@255 | 304 | PRIV_LOAD_SHORT_OE(PICOJAVA, 0xff0b), |
jjg@255 | 305 | PRIV_LOAD_WORD_OE(PICOJAVA, 0xff0c), |
jjg@255 | 306 | PRIV_READ_ICACHE_TAG(PICOJAVA, 0xff0e), |
jjg@255 | 307 | PRIV_READ_ICACHE_DATA(PICOJAVA, 0xff0f), |
jjg@255 | 308 | PRIV_NCLOAD_UBYTE(PICOJAVA, 0xff10), |
jjg@255 | 309 | PRIV_NCLOAD_BYTE(PICOJAVA, 0xff11), |
jjg@255 | 310 | PRIV_NCLOAD_CHAR(PICOJAVA, 0xff12), |
jjg@255 | 311 | PRIV_NCLOAD_SHORT(PICOJAVA, 0xff13), |
jjg@255 | 312 | PRIV_NCLOAD_WORD(PICOJAVA, 0xff14), |
jjg@255 | 313 | PRIV_POWERDOWN(PICOJAVA, 0xff16), |
jjg@255 | 314 | PRIV_READ_SCACHE_DATA(PICOJAVA, 0xff17), |
jjg@255 | 315 | PRIV_NCLOAD_CHAR_OE(PICOJAVA, 0xff1a), |
jjg@255 | 316 | PRIV_NCLOAD_SHORT_OE(PICOJAVA, 0xff1b), |
jjg@255 | 317 | PRIV_NCLOAD_WORD_OE(PICOJAVA, 0xff1c), |
jjg@255 | 318 | PRIV_CACHE_FLUSH(PICOJAVA, 0xff1e), |
jjg@255 | 319 | PRIV_CACHE_INDEX_FLUSH(PICOJAVA, 0xff1f), |
jjg@255 | 320 | PRIV_STORE_BYTE(PICOJAVA, 0xff20), |
jjg@255 | 321 | PRIV_STORE_SHORT(PICOJAVA, 0xff22), |
jjg@255 | 322 | PRIV_STORE_WORD(PICOJAVA, 0xff24), |
jjg@255 | 323 | PRIV_WRITE_DCACHE_TAG(PICOJAVA, 0xff26), |
jjg@255 | 324 | PRIV_WRITE_DCACHE_DATA(PICOJAVA, 0xff27), |
jjg@255 | 325 | PRIV_STORE_SHORT_OE(PICOJAVA, 0xff2a), |
jjg@255 | 326 | PRIV_STORE_WORD_OE(PICOJAVA, 0xff2c), |
jjg@255 | 327 | PRIV_WRITE_ICACHE_TAG(PICOJAVA, 0xff2e), |
jjg@255 | 328 | PRIV_WRITE_ICACHE_DATA(PICOJAVA, 0xff2f), |
jjg@255 | 329 | PRIV_NCSTORE_BYTE(PICOJAVA, 0xff30), |
jjg@255 | 330 | PRIV_NCSTORE_SHORT(PICOJAVA, 0xff32), |
jjg@255 | 331 | PRIV_NCSTORE_WORD(PICOJAVA, 0xff34), |
jjg@255 | 332 | PRIV_RESET(PICOJAVA, 0xff36), |
jjg@255 | 333 | PRIV_WRITE_SCACHE_DATA(PICOJAVA, 0xff37), |
jjg@255 | 334 | PRIV_NCSTORE_SHORT_OE(PICOJAVA, 0xff3a), |
jjg@255 | 335 | PRIV_NCSTORE_WORD_OE(PICOJAVA, 0xff3c), |
jjg@255 | 336 | PRIV_ZERO_LINE(PICOJAVA, 0xff3e), |
jjg@255 | 337 | PRIV_READ_REG_0(PICOJAVA, 0xff40), |
jjg@255 | 338 | PRIV_READ_REG_1(PICOJAVA, 0xff41), |
jjg@255 | 339 | PRIV_READ_REG_2(PICOJAVA, 0xff42), |
jjg@255 | 340 | PRIV_READ_REG_3(PICOJAVA, 0xff43), |
jjg@255 | 341 | PRIV_READ_REG_4(PICOJAVA, 0xff44), |
jjg@255 | 342 | PRIV_READ_REG_5(PICOJAVA, 0xff45), |
jjg@255 | 343 | PRIV_READ_REG_6(PICOJAVA, 0xff46), |
jjg@255 | 344 | PRIV_READ_REG_7(PICOJAVA, 0xff47), |
jjg@255 | 345 | PRIV_READ_REG_8(PICOJAVA, 0xff48), |
jjg@255 | 346 | PRIV_READ_REG_9(PICOJAVA, 0xff49), |
jjg@255 | 347 | PRIV_READ_REG_10(PICOJAVA, 0xff4a), |
jjg@255 | 348 | PRIV_READ_REG_11(PICOJAVA, 0xff4b), |
jjg@255 | 349 | PRIV_READ_REG_12(PICOJAVA, 0xff4c), |
jjg@255 | 350 | PRIV_READ_REG_13(PICOJAVA, 0xff4d), |
jjg@255 | 351 | PRIV_READ_REG_14(PICOJAVA, 0xff4e), |
jjg@255 | 352 | PRIV_READ_REG_15(PICOJAVA, 0xff4f), |
jjg@255 | 353 | PRIV_READ_REG_16(PICOJAVA, 0xff50), |
jjg@255 | 354 | PRIV_READ_REG_17(PICOJAVA, 0xff51), |
jjg@255 | 355 | PRIV_READ_REG_18(PICOJAVA, 0xff52), |
jjg@255 | 356 | PRIV_READ_REG_19(PICOJAVA, 0xff53), |
jjg@255 | 357 | PRIV_READ_REG_20(PICOJAVA, 0xff54), |
jjg@255 | 358 | PRIV_READ_REG_21(PICOJAVA, 0xff55), |
jjg@255 | 359 | PRIV_READ_REG_22(PICOJAVA, 0xff56), |
jjg@255 | 360 | PRIV_READ_REG_23(PICOJAVA, 0xff57), |
jjg@255 | 361 | PRIV_READ_REG_24(PICOJAVA, 0xff58), |
jjg@255 | 362 | PRIV_READ_REG_25(PICOJAVA, 0xff59), |
jjg@255 | 363 | PRIV_READ_REG_26(PICOJAVA, 0xff5a), |
jjg@255 | 364 | PRIV_READ_REG_27(PICOJAVA, 0xff5b), |
jjg@255 | 365 | PRIV_READ_REG_28(PICOJAVA, 0xff5c), |
jjg@255 | 366 | PRIV_READ_REG_29(PICOJAVA, 0xff5d), |
jjg@255 | 367 | PRIV_READ_REG_30(PICOJAVA, 0xff5e), |
jjg@255 | 368 | PRIV_READ_REG_31(PICOJAVA, 0xff5f), |
jjg@255 | 369 | PRIV_WRITE_REG_0(PICOJAVA, 0xff60), |
jjg@255 | 370 | PRIV_WRITE_REG_1(PICOJAVA, 0xff61), |
jjg@255 | 371 | PRIV_WRITE_REG_2(PICOJAVA, 0xff62), |
jjg@255 | 372 | PRIV_WRITE_REG_3(PICOJAVA, 0xff63), |
jjg@255 | 373 | PRIV_WRITE_REG_4(PICOJAVA, 0xff64), |
jjg@255 | 374 | PRIV_WRITE_REG_5(PICOJAVA, 0xff65), |
jjg@255 | 375 | PRIV_WRITE_REG_6(PICOJAVA, 0xff66), |
jjg@255 | 376 | PRIV_WRITE_REG_7(PICOJAVA, 0xff67), |
jjg@255 | 377 | PRIV_WRITE_REG_8(PICOJAVA, 0xff68), |
jjg@255 | 378 | PRIV_WRITE_REG_9(PICOJAVA, 0xff69), |
jjg@255 | 379 | PRIV_WRITE_REG_10(PICOJAVA, 0xff6a), |
jjg@255 | 380 | PRIV_WRITE_REG_11(PICOJAVA, 0xff6b), |
jjg@255 | 381 | PRIV_WRITE_REG_12(PICOJAVA, 0xff6c), |
jjg@255 | 382 | PRIV_WRITE_REG_13(PICOJAVA, 0xff6d), |
jjg@255 | 383 | PRIV_WRITE_REG_14(PICOJAVA, 0xff6e), |
jjg@255 | 384 | PRIV_WRITE_REG_15(PICOJAVA, 0xff6f), |
jjg@255 | 385 | PRIV_WRITE_REG_16(PICOJAVA, 0xff70), |
jjg@255 | 386 | PRIV_WRITE_REG_17(PICOJAVA, 0xff71), |
jjg@255 | 387 | PRIV_WRITE_REG_18(PICOJAVA, 0xff72), |
jjg@255 | 388 | PRIV_WRITE_REG_19(PICOJAVA, 0xff73), |
jjg@255 | 389 | PRIV_WRITE_REG_20(PICOJAVA, 0xff74), |
jjg@255 | 390 | PRIV_WRITE_REG_21(PICOJAVA, 0xff75), |
jjg@255 | 391 | PRIV_WRITE_REG_22(PICOJAVA, 0xff76), |
jjg@255 | 392 | PRIV_WRITE_REG_23(PICOJAVA, 0xff77), |
jjg@255 | 393 | PRIV_WRITE_REG_24(PICOJAVA, 0xff78), |
jjg@255 | 394 | PRIV_WRITE_REG_25(PICOJAVA, 0xff79), |
jjg@255 | 395 | PRIV_WRITE_REG_26(PICOJAVA, 0xff7a), |
jjg@255 | 396 | PRIV_WRITE_REG_27(PICOJAVA, 0xff7b), |
jjg@255 | 397 | PRIV_WRITE_REG_28(PICOJAVA, 0xff7c), |
jjg@255 | 398 | PRIV_WRITE_REG_29(PICOJAVA, 0xff7d), |
jjg@255 | 399 | PRIV_WRITE_REG_30(PICOJAVA, 0xff7e), |
jjg@255 | 400 | PRIV_WRITE_REG_31(PICOJAVA, 0xff7f); |
jjg@255 | 401 | |
jjg@255 | 402 | Opcode(int opcode) { |
jjg@255 | 403 | this(STANDARD, opcode, NO_OPERANDS); |
jjg@255 | 404 | } |
jjg@255 | 405 | |
jjg@255 | 406 | Opcode(int opcode, Instruction.Kind kind) { |
jjg@255 | 407 | this(STANDARD, opcode, kind); |
jjg@255 | 408 | } |
jjg@255 | 409 | |
jjg@255 | 410 | Opcode(Set set, int opcode) { |
jjg@255 | 411 | this(set, opcode, (set == STANDARD ? NO_OPERANDS : WIDE_NO_OPERANDS)); |
jjg@255 | 412 | } |
jjg@255 | 413 | |
jjg@255 | 414 | Opcode(Set set, int opcode, Instruction.Kind kind) { |
jjg@255 | 415 | this.set = set; |
jjg@255 | 416 | this.opcode = opcode; |
jjg@255 | 417 | this.kind = kind; |
jjg@255 | 418 | } |
jjg@255 | 419 | |
jjg@255 | 420 | public final Set set; |
jjg@255 | 421 | public final int opcode; |
jjg@255 | 422 | public final Instruction.Kind kind; |
jjg@255 | 423 | |
jjg@255 | 424 | /** Get the Opcode for a simple standard 1-byte opcode. */ |
jjg@255 | 425 | public static Opcode get(int opcode) { |
jjg@255 | 426 | return stdOpcodes[opcode]; |
jjg@255 | 427 | } |
jjg@255 | 428 | |
jjg@255 | 429 | /** Get the Opcode for 1- or 2-byte opcode. */ |
jjg@255 | 430 | public static Opcode get(int opcodePrefix, int opcode) { |
jjg@255 | 431 | Opcode[] block = getOpcodeBlock(opcodePrefix); |
jjg@255 | 432 | return (block == null ? null : block[opcode]); |
jjg@255 | 433 | } |
jjg@255 | 434 | |
jjg@255 | 435 | private static Opcode[] getOpcodeBlock(int opcodePrefix) { |
jjg@255 | 436 | switch (opcodePrefix) { |
jjg@255 | 437 | case 0: |
jjg@255 | 438 | return stdOpcodes; |
jjg@255 | 439 | case WIDE: |
jjg@255 | 440 | return wideOpcodes; |
jjg@255 | 441 | case NONPRIV: |
jjg@255 | 442 | return nonPrivOpcodes; |
jjg@255 | 443 | case PRIV: |
jjg@255 | 444 | return privOpcodes; |
jjg@255 | 445 | default: |
jjg@255 | 446 | return null; |
jjg@255 | 447 | } |
jjg@255 | 448 | |
jjg@255 | 449 | } |
jjg@255 | 450 | |
vromero@1442 | 451 | private static final Opcode[] stdOpcodes = new Opcode[256]; |
vromero@1442 | 452 | private static final Opcode[] wideOpcodes = new Opcode[256]; |
vromero@1442 | 453 | private static final Opcode[] nonPrivOpcodes = new Opcode[256]; |
vromero@1442 | 454 | private static final Opcode[] privOpcodes = new Opcode[256]; |
jjg@255 | 455 | static { |
jjg@255 | 456 | for (Opcode o: values()) |
jjg@255 | 457 | getOpcodeBlock(o.opcode >> 8)[o.opcode & 0xff] = o; |
jjg@255 | 458 | } |
jjg@255 | 459 | |
jjg@255 | 460 | /** The byte prefix for the wide instructions. */ |
jjg@255 | 461 | public static final int WIDE = 0xc4; |
jjg@255 | 462 | /** The byte prefix for the PicoJava nonpriv instructions. */ |
jjg@255 | 463 | public static final int NONPRIV = 0xfe; |
jjg@255 | 464 | /** The byte prefix for the PicoJava priv instructions. */ |
jjg@255 | 465 | public static final int PRIV = 0xff; |
jjg@255 | 466 | |
jjg@255 | 467 | public enum Set { |
jjg@255 | 468 | /** Standard opcodes. */ |
jjg@255 | 469 | STANDARD, |
jjg@255 | 470 | /** Legacy support for PicoJava opcodes. */ |
jjg@255 | 471 | PICOJAVA }; |
jjg@255 | 472 | } |