dex_instruction-inl.h revision 29a2648821ea4d0b5d3aecb9f835822fdfe6faa1
1807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz/* 2807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * Copyright (C) 2011 The Android Open Source Project 3807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * 4807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * Licensed under the Apache License, Version 2.0 (the "License"); 5807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * you may not use this file except in compliance with the License. 6807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * You may obtain a copy of the License at 7807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * 8807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * http://www.apache.org/licenses/LICENSE-2.0 9807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * 10807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * Unless required by applicable law or agreed to in writing, software 11807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * distributed under the License is distributed on an "AS IS" BASIS, 12807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * See the License for the specific language governing permissions and 14807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * limitations under the License. 15807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz */ 16807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 17fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#ifndef ART_RUNTIME_DEX_INSTRUCTION_INL_H_ 18fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#define ART_RUNTIME_DEX_INSTRUCTION_INL_H_ 19807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 20807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz#include "dex_instruction.h" 21807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 22807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertznamespace art { 23807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 24807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz//------------------------------------------------------------------------------ 25807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz// VRegA 26807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz//------------------------------------------------------------------------------ 2729a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogersinline bool Instruction::HasVRegA() const { 2829a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers switch (FormatOf(Opcode())) { 2929a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k10t: return true; 3029a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k10x: return true; 3129a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k11n: return true; 3229a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k11x: return true; 3329a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k12x: return true; 3429a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k20t: return true; 3529a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k21c: return true; 3629a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k21h: return true; 3729a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k21s: return true; 3829a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k21t: return true; 3929a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22b: return true; 4029a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22c: return true; 4129a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22s: return true; 4229a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22t: return true; 4329a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22x: return true; 4429a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k23x: return true; 4529a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k30t: return true; 4629a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k31c: return true; 4729a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k31i: return true; 4829a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k31t: return true; 4929a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k32x: return true; 5029a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k35c: return true; 5129a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k3rc: return true; 5229a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k51l: return true; 5329a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers default: return false; 5429a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers } 5529a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers} 5629a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers 5729a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogersinline int32_t Instruction::VRegA() const { 5829a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers switch (FormatOf(Opcode())) { 5929a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k10t: return VRegA_10t(); 6029a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k10x: return VRegA_10x(); 6129a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k11n: return VRegA_11n(); 6229a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k11x: return VRegA_11x(); 6329a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k12x: return VRegA_12x(); 6429a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k20t: return VRegA_20t(); 6529a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k21c: return VRegA_21c(); 6629a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k21h: return VRegA_21h(); 6729a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k21s: return VRegA_21s(); 6829a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k21t: return VRegA_21t(); 6929a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22b: return VRegA_22b(); 7029a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22c: return VRegA_22c(); 7129a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22s: return VRegA_22s(); 7229a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22t: return VRegA_22t(); 7329a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22x: return VRegA_22x(); 7429a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k23x: return VRegA_23x(); 7529a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k30t: return VRegA_30t(); 7629a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k31c: return VRegA_31c(); 7729a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k31i: return VRegA_31i(); 7829a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k31t: return VRegA_31t(); 7929a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k32x: return VRegA_32x(); 8029a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k35c: return VRegA_35c(); 8129a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k3rc: return VRegA_3rc(); 8229a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k51l: return VRegA_51l(); 8329a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers default: 8429a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers LOG(FATAL) << "Tried to access vA of instruction " << Name() << " which has no A operand."; 8529a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers exit(EXIT_FAILURE); 8629a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers } 8729a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers} 8829a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers 893b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline int8_t Instruction::VRegA_10t(uint16_t inst_data) const { 90807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k10t); 913b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return static_cast<int8_t>(InstAA(inst_data)); 92807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 93807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 943b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint8_t Instruction::VRegA_10x(uint16_t inst_data) const { 955243e912875026f99428088db7e80cb11651d64eSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k10x); 963b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstAA(inst_data); 975243e912875026f99428088db7e80cb11651d64eSebastien Hertz} 985243e912875026f99428088db7e80cb11651d64eSebastien Hertz 993b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint4_t Instruction::VRegA_11n(uint16_t inst_data) const { 100807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k11n); 1013b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstA(inst_data); 102807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 103807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 1043b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint8_t Instruction::VRegA_11x(uint16_t inst_data) const { 105807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k11x); 1063b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstAA(inst_data); 107807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 108807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 1093b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint4_t Instruction::VRegA_12x(uint16_t inst_data) const { 110807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k12x); 1113b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstA(inst_data); 112807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 113807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 114807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline int16_t Instruction::VRegA_20t() const { 115807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k20t); 116807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return static_cast<int16_t>(Fetch16(1)); 117807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 118807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 1193b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint8_t Instruction::VRegA_21c(uint16_t inst_data) const { 120807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k21c); 1213b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstAA(inst_data); 122807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 123807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 1243b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint8_t Instruction::VRegA_21h(uint16_t inst_data) const { 125807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k21h); 1263b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstAA(inst_data); 127807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 128807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 1293b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint8_t Instruction::VRegA_21s(uint16_t inst_data) const { 130807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k21s); 1313b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstAA(inst_data); 132807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 133807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 1343b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint8_t Instruction::VRegA_21t(uint16_t inst_data) const { 135807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k21t); 1363b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstAA(inst_data); 137807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 138807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 1393b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint8_t Instruction::VRegA_22b(uint16_t inst_data) const { 140807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k22b); 1413b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstAA(inst_data); 142807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 143807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 1443b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint4_t Instruction::VRegA_22c(uint16_t inst_data) const { 145807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k22c); 1463b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstA(inst_data); 147807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 148807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 1493b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint4_t Instruction::VRegA_22s(uint16_t inst_data) const { 150807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k22s); 1513b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstA(inst_data); 152807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 153807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 1543b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint4_t Instruction::VRegA_22t(uint16_t inst_data) const { 155807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k22t); 1563b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstA(inst_data); 157807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 158807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 1593b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint8_t Instruction::VRegA_22x(uint16_t inst_data) const { 160807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k22x); 1613b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstAA(inst_data); 162807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 163807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 1643b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint8_t Instruction::VRegA_23x(uint16_t inst_data) const { 165807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k23x); 1663b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstAA(inst_data); 167807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 168807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 169807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline int32_t Instruction::VRegA_30t() const { 170807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k30t); 171807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return static_cast<int32_t>(Fetch32(1)); 172807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 173807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 1743b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint8_t Instruction::VRegA_31c(uint16_t inst_data) const { 175807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k31c); 1763b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstAA(inst_data); 177807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 178807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 1793b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint8_t Instruction::VRegA_31i(uint16_t inst_data) const { 180807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k31i); 1813b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstAA(inst_data); 182807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 183807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 1843b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint8_t Instruction::VRegA_31t(uint16_t inst_data) const { 185807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k31t); 1863b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstAA(inst_data); 187807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 188807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 189807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline uint16_t Instruction::VRegA_32x() const { 190807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k32x); 191807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return Fetch16(1); 192807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 193807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 1943b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint4_t Instruction::VRegA_35c(uint16_t inst_data) const { 195807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k35c); 1963b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstB(inst_data); // This is labeled A in the spec. 197807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 198807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 1993b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint8_t Instruction::VRegA_3rc(uint16_t inst_data) const { 200807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k3rc); 2013b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstAA(inst_data); 202807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 203807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 2043b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint8_t Instruction::VRegA_51l(uint16_t inst_data) const { 205807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k51l); 2063b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstAA(inst_data); 207807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 208807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 209807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz//------------------------------------------------------------------------------ 210807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz// VRegB 211807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz//------------------------------------------------------------------------------ 21229a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogersinline bool Instruction::HasVRegB() const { 21329a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers switch (FormatOf(Opcode())) { 21429a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k11n: return true; 21529a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k12x: return true; 21629a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k21c: return true; 21729a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k21h: return true; 21829a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k21s: return true; 21929a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k21t: return true; 22029a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22b: return true; 22129a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22c: return true; 22229a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22s: return true; 22329a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22t: return true; 22429a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22x: return true; 22529a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k23x: return true; 22629a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k31c: return true; 22729a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k31i: return true; 22829a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k31t: return true; 22929a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k32x: return true; 23029a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k35c: return true; 23129a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k3rc: return true; 23229a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k51l: return true; 23329a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers default: return false; 23429a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers } 23529a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers} 23629a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers 23729a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogersinline bool Instruction::HasWideVRegB() const { 23829a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers return FormatOf(Opcode()) == k51l; 23929a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers} 24029a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers 24129a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogersinline int32_t Instruction::VRegB() const { 24229a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers switch (FormatOf(Opcode())) { 24329a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k11n: return VRegB_11n(); 24429a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k12x: return VRegB_12x(); 24529a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k21c: return VRegB_21c(); 24629a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k21h: return VRegB_21h(); 24729a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k21s: return VRegB_21s(); 24829a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k21t: return VRegB_21t(); 24929a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22b: return VRegB_22b(); 25029a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22c: return VRegB_22c(); 25129a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22s: return VRegB_22s(); 25229a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22t: return VRegB_22t(); 25329a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22x: return VRegB_22x(); 25429a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k23x: return VRegB_23x(); 25529a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k31c: return VRegB_31c(); 25629a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k31i: return VRegB_31i(); 25729a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k31t: return VRegB_31t(); 25829a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k32x: return VRegB_32x(); 25929a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k35c: return VRegB_35c(); 26029a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k3rc: return VRegB_3rc(); 26129a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k51l: return VRegB_51l(); 26229a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers default: 26329a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers LOG(FATAL) << "Tried to access vB of instruction " << Name() << " which has no B operand."; 26429a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers exit(EXIT_FAILURE); 26529a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers } 26629a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers} 26729a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers 26829a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogersinline uint64_t Instruction::WideVRegB() const { 26929a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers return VRegB_51l(); 27029a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers} 27129a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers 2723b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline int4_t Instruction::VRegB_11n(uint16_t inst_data) const { 273807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k11n); 2743b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return static_cast<int4_t>((InstB(inst_data) << 28) >> 28); 275807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 276807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 2773b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint4_t Instruction::VRegB_12x(uint16_t inst_data) const { 278807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k12x); 2793b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstB(inst_data); 280807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 281807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 282807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline uint16_t Instruction::VRegB_21c() const { 283807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k21c); 284807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return Fetch16(1); 285807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 286807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 287807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline uint16_t Instruction::VRegB_21h() const { 288807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k21h); 289807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return Fetch16(1); 290807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 291807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 292807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline int16_t Instruction::VRegB_21s() const { 293807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k21s); 294807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return static_cast<int16_t>(Fetch16(1)); 295807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 296807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 297807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline int16_t Instruction::VRegB_21t() const { 298807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k21t); 299807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return static_cast<int16_t>(Fetch16(1)); 300807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 301807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 302807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline uint8_t Instruction::VRegB_22b() const { 303807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k22b); 304807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return static_cast<uint8_t>(Fetch16(1) & 0xff); 305807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 306807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 3073b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint4_t Instruction::VRegB_22c(uint16_t inst_data) const { 308807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k22c); 3093b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstB(inst_data); 310807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 311807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 3123b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint4_t Instruction::VRegB_22s(uint16_t inst_data) const { 313807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k22s); 3143b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstB(inst_data); 315807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 316807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 3173b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertzinline uint4_t Instruction::VRegB_22t(uint16_t inst_data) const { 318807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k22t); 3193b588e09eac6fb2aff64595e2232e479703850fcSebastien Hertz return InstB(inst_data); 320807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 321807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 322807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline uint16_t Instruction::VRegB_22x() const { 323807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k22x); 324807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return Fetch16(1); 325807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 326807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 327807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline uint8_t Instruction::VRegB_23x() const { 328807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k23x); 329807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return static_cast<uint8_t>(Fetch16(1) & 0xff); 330807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 331807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 332807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline uint32_t Instruction::VRegB_31c() const { 333807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k31c); 334807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return Fetch32(1); 335807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 336807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 337807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline int32_t Instruction::VRegB_31i() const { 338807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k31i); 339807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return static_cast<int32_t>(Fetch32(1)); 340807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 341807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 342807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline int32_t Instruction::VRegB_31t() const { 343807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k31t); 344807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return static_cast<int32_t>(Fetch32(1)); 345807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 346807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 347807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline uint16_t Instruction::VRegB_32x() const { 348807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k32x); 349807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return Fetch16(2); 350807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 351807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 352807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline uint16_t Instruction::VRegB_35c() const { 353807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k35c); 354807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return Fetch16(1); 355807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 356807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 357807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline uint16_t Instruction::VRegB_3rc() const { 358807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k3rc); 359807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return Fetch16(1); 360807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 361807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 362807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline uint64_t Instruction::VRegB_51l() const { 363807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k51l); 364807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz uint64_t vB_wide = Fetch32(1) | ((uint64_t) Fetch32(3) << 32); 365807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return vB_wide; 366807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 367807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 368807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz//------------------------------------------------------------------------------ 369807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz// VRegC 370807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz//------------------------------------------------------------------------------ 37129a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogersinline bool Instruction::HasVRegC() const { 37229a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers switch (FormatOf(Opcode())) { 37329a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22b: return true; 37429a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22c: return true; 37529a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22s: return true; 37629a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22t: return true; 37729a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k23x: return true; 37829a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k35c: return true; 37929a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k3rc: return true; 38029a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers default: return false; 38129a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers } 38229a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers} 38329a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers 38429a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogersinline int32_t Instruction::VRegC() const { 38529a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers switch (FormatOf(Opcode())) { 38629a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22b: return VRegC_22b(); 38729a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22c: return VRegC_22c(); 38829a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22s: return VRegC_22s(); 38929a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k22t: return VRegC_22t(); 39029a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k23x: return VRegC_23x(); 39129a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k35c: return VRegC_35c(); 39229a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers case k3rc: return VRegC_3rc(); 39329a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers default: 39429a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers LOG(FATAL) << "Tried to access vC of instruction " << Name() << " which has no C operand."; 39529a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers exit(EXIT_FAILURE); 39629a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers } 39729a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers} 39829a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers 399807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline int8_t Instruction::VRegC_22b() const { 400807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k22b); 401807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return static_cast<int8_t>(Fetch16(1) >> 8); 402807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 403807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 404807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline uint16_t Instruction::VRegC_22c() const { 405807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k22c); 406807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return Fetch16(1); 407807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 408807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 409807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline int16_t Instruction::VRegC_22s() const { 410807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k22s); 411807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return static_cast<int16_t>(Fetch16(1)); 412807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 413807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 414807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline int16_t Instruction::VRegC_22t() const { 415807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k22t); 416807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return static_cast<int16_t>(Fetch16(1)); 417807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 418807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 419807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline uint8_t Instruction::VRegC_23x() const { 420807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k23x); 421807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return static_cast<uint8_t>(Fetch16(1) >> 8); 422807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 423807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 424807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline uint4_t Instruction::VRegC_35c() const { 425807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k35c); 426807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return static_cast<uint4_t>(Fetch16(2) & 0x0f); 427807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 428807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 429807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertzinline uint16_t Instruction::VRegC_3rc() const { 430807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k3rc); 431807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz return Fetch16(2); 432807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 433807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 43429a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogersinline bool Instruction::HasVarArgs() const { 43529a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers return FormatOf(Opcode()) == k35c; 43629a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers} 43729a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogers 43829a2648821ea4d0b5d3aecb9f835822fdfe6faa1Ian Rogersinline void Instruction::GetVarArgs(uint32_t arg[5], uint16_t inst_data) const { 439807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz DCHECK_EQ(FormatOf(Opcode()), k35c); 440807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 441807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz /* 442807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * Note that the fields mentioned in the spec don't appear in 443807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * their "usual" positions here compared to most formats. This 444807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * was done so that the field names for the argument count and 445807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * reference index match between this format and the corresponding 446807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * range formats (3rc and friends). 447807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * 448807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * Bottom line: The argument count is always in vA, and the 449807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * method constant (or equivalent) is always in vB. 450807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz */ 451807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz uint16_t regList = Fetch16(2); 452c61124bdeaae94f977ffc36ac69535e792c226f2Sebastien Hertz uint4_t count = InstB(inst_data); // This is labeled A in the spec. 453c61124bdeaae94f977ffc36ac69535e792c226f2Sebastien Hertz DCHECK_LE(count, 5U) << "Invalid arg count in 35c (" << count << ")"; 454807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 455807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz /* 456807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * Copy the argument registers into the arg[] array, and 457807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * also copy the first argument (if any) into vC. (The 458807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * DecodedInstruction structure doesn't have separate 459807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * fields for {vD, vE, vF, vG}, so there's no need to make 460807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz * copies of those.) Note that cases 5..2 fall through. 461807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz */ 462807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz switch (count) { 463c61124bdeaae94f977ffc36ac69535e792c226f2Sebastien Hertz case 5: arg[4] = InstA(inst_data); 464807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz case 4: arg[3] = (regList >> 12) & 0x0f; 465807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz case 3: arg[2] = (regList >> 8) & 0x0f; 466807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz case 2: arg[1] = (regList >> 4) & 0x0f; 467807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz case 1: arg[0] = regList & 0x0f; break; 468c61124bdeaae94f977ffc36ac69535e792c226f2Sebastien Hertz default: // case 0 469c61124bdeaae94f977ffc36ac69535e792c226f2Sebastien Hertz break; // Valid, but no need to do anything. 470807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz } 471807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz} 472807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 4737934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom} // namespace art 474807a25640d4f4de8143b160b3bb8f552ffbf6f4aSebastien Hertz 475fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#endif // ART_RUNTIME_DEX_INSTRUCTION_INL_H_ 476