15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2007 The Android Open Source Project
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License");
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * you may not use this file except in compliance with the License.
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You may obtain a copy of the License at
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *      http://www.apache.org/licenses/LICENSE-2.0
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Unless required by applicable law or agreed to in writing, software
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS,
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * See the License for the specific language governing permissions and
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * limitations under the License.
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)package com.android.dx.dex.code.form;
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)import com.android.dx.dex.code.DalvInsn;
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)import com.android.dx.dex.code.InsnFormat;
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)import com.android.dx.dex.code.SimpleInsn;
2253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)import com.android.dx.util.AnnotatedOutput;
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
245d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)/**
25a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * Instruction format {@code 10x}. See the instruction format spec
2653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * for details.
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
28c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)public final class Form10x extends InsnFormat {
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /** {@code non-null;} unique instance of this class */
30d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    public static final InsnFormat THE_ONE = new Form10x();
31d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
32d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
33d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * Constructs an instance. This class is not publicly
34d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * instantiable. Use {@link #THE_ONE}.
35d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
36d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    private Form10x() {
37d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        // This space intentionally left blank.
38d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    }
39d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
40d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /** {@inheritDoc} */
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    @Override
425d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    public String insnArgString(DalvInsn insn) {
4351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        // This format has no arguments.
4409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return "";
4509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
4609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
47d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /** {@inheritDoc} */
48d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    @Override
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    public String insnCommentString(DalvInsn insn, boolean noteIndices) {
5009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        // This format has no comment.
5109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return "";
5209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
53d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
54d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /** {@inheritDoc} */
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    @Override
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    public int codeSize() {
575d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        return 1;
585d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    }
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /** {@inheritDoc} */
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    @Override
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    public boolean isCompatible(DalvInsn insn) {
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return (insn instanceof SimpleInsn) &&
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            (insn.getRegisters().size() == 0);
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /** {@inheritDoc} */
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    @Override
69591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    public void writeTo(AnnotatedOutput out, DalvInsn insn) {
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        write(out, opcodeUnit(insn, 0));
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)