18a151ae671f6d5c99d55779005580834b49187f0Ben Gruver/* 28a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * Copyright 2013, Google Inc. 38a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * All rights reserved. 48a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * 58a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * Redistribution and use in source and binary forms, with or without 68a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * modification, are permitted provided that the following conditions are 78a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * met: 88a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * 98a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * * Redistributions of source code must retain the above copyright 108a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * notice, this list of conditions and the following disclaimer. 118a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * * Redistributions in binary form must reproduce the above 128a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * copyright notice, this list of conditions and the following disclaimer 138a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * in the documentation and/or other materials provided with the 148a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * distribution. 158a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * * Neither the name of Google Inc. nor the names of its 168a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * contributors may be used to endorse or promote products derived from 178a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * this software without specific prior written permission. 188a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * 198a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 208a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 218a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 228a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 238a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 248a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 258a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 268a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 278a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 288a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 298a151ae671f6d5c99d55779005580834b49187f0Ben Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 308a151ae671f6d5c99d55779005580834b49187f0Ben Gruver */ 318a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 328a151ae671f6d5c99d55779005580834b49187f0Ben Gruverpackage org.jf.dexlib2.dexbacked.instruction; 338a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 348a151ae671f6d5c99d55779005580834b49187f0Ben Gruverimport org.jf.dexlib2.Opcode; 358a151ae671f6d5c99d55779005580834b49187f0Ben Gruverimport org.jf.dexlib2.dexbacked.DexBackedDexFile; 368a151ae671f6d5c99d55779005580834b49187f0Ben Gruverimport org.jf.dexlib2.iface.instruction.formats.Instruction35ms; 378a151ae671f6d5c99d55779005580834b49187f0Ben Gruverimport org.jf.util.NibbleUtils; 388a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 398a151ae671f6d5c99d55779005580834b49187f0Ben Gruverimport javax.annotation.Nonnull; 408a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 418a151ae671f6d5c99d55779005580834b49187f0Ben Gruverpublic class DexBackedInstruction35ms extends DexBackedInstruction implements Instruction35ms { 428a151ae671f6d5c99d55779005580834b49187f0Ben Gruver public DexBackedInstruction35ms(@Nonnull DexBackedDexFile dexFile, 438a151ae671f6d5c99d55779005580834b49187f0Ben Gruver @Nonnull Opcode opcode, 448a151ae671f6d5c99d55779005580834b49187f0Ben Gruver int instructionStart) { 458a151ae671f6d5c99d55779005580834b49187f0Ben Gruver super(dexFile, opcode, instructionStart); 468a151ae671f6d5c99d55779005580834b49187f0Ben Gruver } 478a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 488a151ae671f6d5c99d55779005580834b49187f0Ben Gruver @Override public int getRegisterCount() { 498a151ae671f6d5c99d55779005580834b49187f0Ben Gruver return NibbleUtils.extractHighUnsignedNibble(dexFile.readUbyte(instructionStart + 1)); 508a151ae671f6d5c99d55779005580834b49187f0Ben Gruver } 518a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 528a151ae671f6d5c99d55779005580834b49187f0Ben Gruver @Override 538a151ae671f6d5c99d55779005580834b49187f0Ben Gruver public int getRegisterC() { 548a151ae671f6d5c99d55779005580834b49187f0Ben Gruver return NibbleUtils.extractLowUnsignedNibble(dexFile.readUbyte(instructionStart + 4)); 558a151ae671f6d5c99d55779005580834b49187f0Ben Gruver } 568a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 578a151ae671f6d5c99d55779005580834b49187f0Ben Gruver @Override 588a151ae671f6d5c99d55779005580834b49187f0Ben Gruver public int getRegisterD() { 598a151ae671f6d5c99d55779005580834b49187f0Ben Gruver return NibbleUtils.extractHighUnsignedNibble(dexFile.readUbyte(instructionStart + 4)); 608a151ae671f6d5c99d55779005580834b49187f0Ben Gruver } 618a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 628a151ae671f6d5c99d55779005580834b49187f0Ben Gruver @Override 638a151ae671f6d5c99d55779005580834b49187f0Ben Gruver public int getRegisterE() { 648a151ae671f6d5c99d55779005580834b49187f0Ben Gruver return NibbleUtils.extractLowUnsignedNibble(dexFile.readUbyte(instructionStart + 5)); 658a151ae671f6d5c99d55779005580834b49187f0Ben Gruver } 668a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 678a151ae671f6d5c99d55779005580834b49187f0Ben Gruver @Override 688a151ae671f6d5c99d55779005580834b49187f0Ben Gruver public int getRegisterF() { 698a151ae671f6d5c99d55779005580834b49187f0Ben Gruver return NibbleUtils.extractHighUnsignedNibble(dexFile.readUbyte(instructionStart + 5)); 708a151ae671f6d5c99d55779005580834b49187f0Ben Gruver } 718a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 728a151ae671f6d5c99d55779005580834b49187f0Ben Gruver @Override 738a151ae671f6d5c99d55779005580834b49187f0Ben Gruver public int getRegisterG() { 748a151ae671f6d5c99d55779005580834b49187f0Ben Gruver return NibbleUtils.extractLowUnsignedNibble(dexFile.readUbyte(instructionStart + 1)); 758a151ae671f6d5c99d55779005580834b49187f0Ben Gruver } 768a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 778a151ae671f6d5c99d55779005580834b49187f0Ben Gruver @Override 788a151ae671f6d5c99d55779005580834b49187f0Ben Gruver public int getVtableIndex() { 798a151ae671f6d5c99d55779005580834b49187f0Ben Gruver return dexFile.readUshort(instructionStart + 2); 808a151ae671f6d5c99d55779005580834b49187f0Ben Gruver } 818a151ae671f6d5c99d55779005580834b49187f0Ben Gruver} 82