1d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein/* 2d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * Copyright (C) 2011 The Android Open Source Project 3d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * 4d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * Licensed under the Apache License, Version 2.0 (the "License"); 5d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * you may not use this file except in compliance with the License. 6d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * You may obtain a copy of the License at 7d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * 8d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * http://www.apache.org/licenses/LICENSE-2.0 9d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * 10d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * Unless required by applicable law or agreed to in writing, software 11d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * distributed under the License is distributed on an "AS IS" BASIS, 12d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * See the License for the specific language governing permissions and 14d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * limitations under the License. 15d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein */ 16d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein 17537939ca06a47668f719ee06159303bcd3175c69Dan Bornsteinpackage com.android.dx.io.instructions; 18d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein 19d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein/** 20d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * A decoded Dalvik instruction which contains the payload for 21d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * a {@code packed-switch} instruction. 22d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein */ 23d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornsteinpublic final class SparseSwitchPayloadDecodedInstruction 24d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein extends DecodedInstruction { 25d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein /** array of key values */ 26d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein private final int[] keys; 27d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein 28d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein /** 29d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * array of target addresses. These are absolute, not relative, 30d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * addresses. 31d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein */ 32d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein private final int[] targets; 33d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein 34d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein /** 35d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * Constructs an instance. 36d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein */ 37d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein public SparseSwitchPayloadDecodedInstruction(InstructionCodec format, 38d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein int opcode, int[] keys, int[] targets) { 39d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein super(format, opcode, 0, null, 0, 0L); 40d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein 41d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein if (keys.length != targets.length) { 42d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein throw new IllegalArgumentException("keys/targets length mismatch"); 43d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein } 44d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein 45d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein this.keys = keys; 46d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein this.targets = targets; 47d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein } 48d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein 49e8bf740e4843a2e7a41bfa6c2f96f8ae4a7147fcChris Warrington /** {@inheritDoc} */ 509dbd802c8c96c3a66873bc600bc7d1374a1d08e5Orion Hodson @Override 51d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein public int getRegisterCount() { 52d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein return 0; 53d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein } 54d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein 55d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein public int[] getKeys() { 56d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein return keys; 57d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein } 58d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein 59d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein public int[] getTargets() { 60d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein return targets; 61d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein } 62d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein 63e8bf740e4843a2e7a41bfa6c2f96f8ae4a7147fcChris Warrington /** {@inheritDoc} */ 649dbd802c8c96c3a66873bc600bc7d1374a1d08e5Orion Hodson @Override 65d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein public DecodedInstruction withIndex(int newIndex) { 66d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein throw new UnsupportedOperationException("no index in instruction"); 67d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein } 68d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein} 69