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.immutable.instruction; 338a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 348a151ae671f6d5c99d55779005580834b49187f0Ben Gruverimport org.jf.dexlib2.Format; 358a151ae671f6d5c99d55779005580834b49187f0Ben Gruverimport org.jf.dexlib2.Opcode; 368a151ae671f6d5c99d55779005580834b49187f0Ben Gruverimport org.jf.dexlib2.iface.instruction.formats.Instruction35ms; 378a151ae671f6d5c99d55779005580834b49187f0Ben Gruverimport org.jf.dexlib2.util.Preconditions; 388a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 398a151ae671f6d5c99d55779005580834b49187f0Ben Gruverimport javax.annotation.Nonnull; 408a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 418a151ae671f6d5c99d55779005580834b49187f0Ben Gruverpublic class ImmutableInstruction35ms extends ImmutableInstruction implements Instruction35ms { 428a151ae671f6d5c99d55779005580834b49187f0Ben Gruver public static final Format FORMAT = Format.Format35ms; 438a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 448a151ae671f6d5c99d55779005580834b49187f0Ben Gruver protected final int registerCount; 458a151ae671f6d5c99d55779005580834b49187f0Ben Gruver protected final int registerC; 468a151ae671f6d5c99d55779005580834b49187f0Ben Gruver protected final int registerD; 478a151ae671f6d5c99d55779005580834b49187f0Ben Gruver protected final int registerE; 488a151ae671f6d5c99d55779005580834b49187f0Ben Gruver protected final int registerF; 498a151ae671f6d5c99d55779005580834b49187f0Ben Gruver protected final int registerG; 50f320ed52934bd63d5f8071624a477f1b3332cd5dBen Gruver protected final int vtableIndex; 518a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 528a151ae671f6d5c99d55779005580834b49187f0Ben Gruver public ImmutableInstruction35ms(@Nonnull Opcode opcode, 538a151ae671f6d5c99d55779005580834b49187f0Ben Gruver int registerCount, 548a151ae671f6d5c99d55779005580834b49187f0Ben Gruver int registerC, 558a151ae671f6d5c99d55779005580834b49187f0Ben Gruver int registerD, 568a151ae671f6d5c99d55779005580834b49187f0Ben Gruver int registerE, 578a151ae671f6d5c99d55779005580834b49187f0Ben Gruver int registerF, 588a151ae671f6d5c99d55779005580834b49187f0Ben Gruver int registerG, 598a151ae671f6d5c99d55779005580834b49187f0Ben Gruver int vtableIndex) { 608a151ae671f6d5c99d55779005580834b49187f0Ben Gruver super(opcode); 618a151ae671f6d5c99d55779005580834b49187f0Ben Gruver this.registerCount = Preconditions.check35cRegisterCount(registerCount); 628a151ae671f6d5c99d55779005580834b49187f0Ben Gruver this.registerC = (registerCount>0) ? Preconditions.checkNibbleRegister(registerC) : 0; 638a151ae671f6d5c99d55779005580834b49187f0Ben Gruver this.registerD = (registerCount>1) ? Preconditions.checkNibbleRegister(registerD) : 0; 648a151ae671f6d5c99d55779005580834b49187f0Ben Gruver this.registerE = (registerCount>2) ? Preconditions.checkNibbleRegister(registerE) : 0; 658a151ae671f6d5c99d55779005580834b49187f0Ben Gruver this.registerF = (registerCount>3) ? Preconditions.checkNibbleRegister(registerF) : 0; 668a151ae671f6d5c99d55779005580834b49187f0Ben Gruver this.registerG = (registerCount>4) ? Preconditions.checkNibbleRegister(registerG) : 0; 678a151ae671f6d5c99d55779005580834b49187f0Ben Gruver this.vtableIndex = Preconditions.checkVtableIndex(vtableIndex); 688a151ae671f6d5c99d55779005580834b49187f0Ben Gruver } 698a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 708a151ae671f6d5c99d55779005580834b49187f0Ben Gruver public static ImmutableInstruction35ms of(Instruction35ms instruction) { 718a151ae671f6d5c99d55779005580834b49187f0Ben Gruver if (instruction instanceof ImmutableInstruction35ms) { 728a151ae671f6d5c99d55779005580834b49187f0Ben Gruver return (ImmutableInstruction35ms)instruction; 738a151ae671f6d5c99d55779005580834b49187f0Ben Gruver } 748a151ae671f6d5c99d55779005580834b49187f0Ben Gruver return new ImmutableInstruction35ms( 758a151ae671f6d5c99d55779005580834b49187f0Ben Gruver instruction.getOpcode(), 768a151ae671f6d5c99d55779005580834b49187f0Ben Gruver instruction.getRegisterCount(), 778a151ae671f6d5c99d55779005580834b49187f0Ben Gruver instruction.getRegisterC(), 788a151ae671f6d5c99d55779005580834b49187f0Ben Gruver instruction.getRegisterD(), 798a151ae671f6d5c99d55779005580834b49187f0Ben Gruver instruction.getRegisterE(), 808a151ae671f6d5c99d55779005580834b49187f0Ben Gruver instruction.getRegisterF(), 818a151ae671f6d5c99d55779005580834b49187f0Ben Gruver instruction.getRegisterG(), 828a151ae671f6d5c99d55779005580834b49187f0Ben Gruver instruction.getVtableIndex()); 838a151ae671f6d5c99d55779005580834b49187f0Ben Gruver } 848a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 858a151ae671f6d5c99d55779005580834b49187f0Ben Gruver @Override public int getRegisterCount() { return registerCount; } 868a151ae671f6d5c99d55779005580834b49187f0Ben Gruver @Override public int getRegisterC() { return registerC; } 878a151ae671f6d5c99d55779005580834b49187f0Ben Gruver @Override public int getRegisterD() { return registerD; } 888a151ae671f6d5c99d55779005580834b49187f0Ben Gruver @Override public int getRegisterE() { return registerE; } 898a151ae671f6d5c99d55779005580834b49187f0Ben Gruver @Override public int getRegisterF() { return registerF; } 908a151ae671f6d5c99d55779005580834b49187f0Ben Gruver @Override public int getRegisterG() { return registerG; } 918a151ae671f6d5c99d55779005580834b49187f0Ben Gruver @Override public int getVtableIndex() { return vtableIndex; } 928a151ae671f6d5c99d55779005580834b49187f0Ben Gruver 938a151ae671f6d5c99d55779005580834b49187f0Ben Gruver @Override public Format getFormat() { return FORMAT; } 948a151ae671f6d5c99d55779005580834b49187f0Ben Gruver} 95