14f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project/* libs/pixelflinger/codeflinger/ARMAssemblerInterface.h 24f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project** 34f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project** Copyright 2006, The Android Open Source Project 44f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project** 54f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 64f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project** you may not use this file except in compliance with the License. 74f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project** You may obtain a copy of the License at 84f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project** 94f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 104f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project** 114f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 124f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 134f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 144f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project** See the License for the specific language governing permissions and 154f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project** limitations under the License. 164f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project*/ 174f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 184f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 194f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef ANDROID_ARMASSEMBLER_INTERFACE_H 204f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define ANDROID_ARMASSEMBLER_INTERFACE_H 214f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 224f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#include <stdint.h> 234f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#include <sys/types.h> 244f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 254f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectnamespace android { 264f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 274f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project// ---------------------------------------------------------------------------- 284f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 294f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectclass ARMAssemblerInterface 304f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project{ 314f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectpublic: 324f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual ~ARMAssemblerInterface(); 334f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 344f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project enum { 354f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project EQ, NE, CS, CC, MI, PL, VS, VC, HI, LS, GE, LT, GT, LE, AL, NV, 364f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project HS = CS, 374f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project LO = CC 384f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project }; 394f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project enum { 404f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project S = 1 414f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project }; 424f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project enum { 434f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project LSL, LSR, ASR, ROR 444f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project }; 454f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project enum { 464f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ED, FD, EA, FA, 474f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project IB, IA, DB, DA 484f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project }; 494f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project enum { 504f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, 514f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SP = R13, 524f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project LR = R14, 534f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project PC = R15 544f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project }; 554f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project enum { 564f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project #define LIST(rr) L##rr=1<<rr 574f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project LIST(R0), LIST(R1), LIST(R2), LIST(R3), LIST(R4), LIST(R5), LIST(R6), 584f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project LIST(R7), LIST(R8), LIST(R9), LIST(R10), LIST(R11), LIST(R12), 594f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project LIST(R13), LIST(R14), LIST(R15), 604f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project LIST(SP), LIST(LR), LIST(PC), 614f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project #undef LIST 624f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project LSAVED = LR4|LR5|LR6|LR7|LR8|LR9|LR10|LR11 | LLR 634f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project }; 644f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 652bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind enum { 662bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind CODEGEN_ARCH_ARM = 1, CODEGEN_ARCH_MIPS 672bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind }; 682bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 694f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // ----------------------------------------------------------------------- 704f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // shifters and addressing modes 714f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // ----------------------------------------------------------------------- 724f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 732bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind // these static versions are used for initializers on LDxx/STxx below 742bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind static uint32_t __immed12_pre(int32_t immed12, int W=0); 752bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind static uint32_t __immed8_pre(int32_t immed12, int W=0); 762bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 772bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind virtual bool isValidImmediate(uint32_t immed) = 0; 782bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind virtual int buildImmediate(uint32_t i, uint32_t& rot, uint32_t& imm) = 0; 794f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 802bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind virtual uint32_t imm(uint32_t immediate) = 0; 812bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind virtual uint32_t reg_imm(int Rm, int type, uint32_t shift) = 0; 822bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind virtual uint32_t reg_rrx(int Rm) = 0; 832bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind virtual uint32_t reg_reg(int Rm, int type, int Rs) = 0; 844f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 854f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // addressing modes... 864f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // LDR(B)/STR(B)/PLD 874f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // (immediate and Rm can be negative, which indicates U=0) 882bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind virtual uint32_t immed12_pre(int32_t immed12, int W=0) = 0; 892bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind virtual uint32_t immed12_post(int32_t immed12) = 0; 902bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind virtual uint32_t reg_scale_pre(int Rm, int type=0, uint32_t shift=0, int W=0) = 0; 912bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind virtual uint32_t reg_scale_post(int Rm, int type=0, uint32_t shift=0) = 0; 924f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 934f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // LDRH/LDRSB/LDRSH/STRH 944f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // (immediate and Rm can be negative, which indicates U=0) 952bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind virtual uint32_t immed8_pre(int32_t immed8, int W=0) = 0; 962bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind virtual uint32_t immed8_post(int32_t immed8) = 0; 972bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind virtual uint32_t reg_pre(int Rm, int W=0) = 0; 982bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind virtual uint32_t reg_post(int Rm) = 0; 994f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1004f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // ----------------------------------------------------------------------- 1014f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // basic instructions & code generation 1024f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // ----------------------------------------------------------------------- 1034f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1044f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // generate the code 1054f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void reset() = 0; 1064f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual int generate(const char* name) = 0; 1074f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void disassemble(const char* name) = 0; 1082bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind virtual int getCodegenArch() = 0; 1094f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1104f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // construct prolog and epilog 1114f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void prolog() = 0; 1124f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void epilog(uint32_t touched) = 0; 1134f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void comment(const char* string) = 0; 1144f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1154f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // data processing... 1164f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project enum { 1174f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project opAND, opEOR, opSUB, opRSB, opADD, opADC, opSBC, opRSC, 1184f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project opTST, opTEQ, opCMP, opCMN, opORR, opMOV, opBIC, opMVN 1194f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project }; 1204f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1214f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void 1224f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project dataProcessing( int opcode, int cc, int s, 1234f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project int Rd, int Rn, 1244f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project uint32_t Op2) = 0; 1254f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1264f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // multiply... 1274f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void MLA(int cc, int s, 1284f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project int Rd, int Rm, int Rs, int Rn) = 0; 1294f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void MUL(int cc, int s, 1304f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project int Rd, int Rm, int Rs) = 0; 1314f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void UMULL(int cc, int s, 1324f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project int RdLo, int RdHi, int Rm, int Rs) = 0; 1334f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void UMUAL(int cc, int s, 1344f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project int RdLo, int RdHi, int Rm, int Rs) = 0; 1354f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void SMULL(int cc, int s, 1364f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project int RdLo, int RdHi, int Rm, int Rs) = 0; 1374f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void SMUAL(int cc, int s, 1384f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project int RdLo, int RdHi, int Rm, int Rs) = 0; 1394f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1404f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // branches... 1414f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void B(int cc, uint32_t* pc) = 0; 1424f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void BL(int cc, uint32_t* pc) = 0; 1434f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void BX(int cc, int Rn) = 0; 1444f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1454f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void label(const char* theLabel) = 0; 1464f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void B(int cc, const char* label) = 0; 1474f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void BL(int cc, const char* label) = 0; 1484f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1494f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // valid only after generate() has been called 1504f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual uint32_t* pcForLabel(const char* label) = 0; 1514f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1524f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // data transfer... 1534f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void LDR (int cc, int Rd, 1542bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind int Rn, uint32_t offset = __immed12_pre(0)) = 0; 1554f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void LDRB(int cc, int Rd, 1562bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind int Rn, uint32_t offset = __immed12_pre(0)) = 0; 1574f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void STR (int cc, int Rd, 1582bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind int Rn, uint32_t offset = __immed12_pre(0)) = 0; 1594f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void STRB(int cc, int Rd, 1602bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind int Rn, uint32_t offset = __immed12_pre(0)) = 0; 1614f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1624f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void LDRH (int cc, int Rd, 1632bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind int Rn, uint32_t offset = __immed8_pre(0)) = 0; 1644f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void LDRSB(int cc, int Rd, 1652bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind int Rn, uint32_t offset = __immed8_pre(0)) = 0; 1664f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void LDRSH(int cc, int Rd, 1672bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind int Rn, uint32_t offset = __immed8_pre(0)) = 0; 1684f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void STRH (int cc, int Rd, 1692bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind int Rn, uint32_t offset = __immed8_pre(0)) = 0; 1704f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1714f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // block data transfer... 1724f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void LDM(int cc, int dir, 1734f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project int Rn, int W, uint32_t reg_list) = 0; 1744f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void STM(int cc, int dir, 1754f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project int Rn, int W, uint32_t reg_list) = 0; 1764f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1774f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // special... 1784f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void SWP(int cc, int Rn, int Rd, int Rm) = 0; 1794f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void SWPB(int cc, int Rn, int Rd, int Rm) = 0; 1804f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void SWI(int cc, uint32_t comment) = 0; 1814f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1824f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // DSP instructions... 1834f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project enum { 1844f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // B=0, T=1 1854f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // yx 1864f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project xyBB = 0, // 0000, 1874f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project xyTB = 2, // 0010, 1884f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project xyBT = 4, // 0100, 1894f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project xyTT = 6, // 0110, 1904f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project yB = 0, // 0000, 1914f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project yT = 4, // 0100 1924f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project }; 1934f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1944f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void PLD(int Rn, uint32_t offset) = 0; 1954f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1964f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void CLZ(int cc, int Rd, int Rm) = 0; 1974f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1984f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void QADD(int cc, int Rd, int Rm, int Rn) = 0; 1994f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void QDADD(int cc, int Rd, int Rm, int Rn) = 0; 2004f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void QSUB(int cc, int Rd, int Rm, int Rn) = 0; 2014f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void QDSUB(int cc, int Rd, int Rm, int Rn) = 0; 2024f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 2034f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void SMUL(int cc, int xy, 2044f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project int Rd, int Rm, int Rs) = 0; 2054f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void SMULW(int cc, int y, 2064f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project int Rd, int Rm, int Rs) = 0; 2074f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void SMLA(int cc, int xy, 2084f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project int Rd, int Rm, int Rs, int Rn) = 0; 2094f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void SMLAL(int cc, int xy, 2104f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project int RdHi, int RdLo, int Rs, int Rm) = 0; 2114f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project virtual void SMLAW(int cc, int y, 2124f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project int Rd, int Rm, int Rs, int Rn) = 0; 2134f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 21496dbb4fc58fe2dcf4390e073dbb42cc77ef2f0b5Martyn Capewell // byte/half word extract... 21596dbb4fc58fe2dcf4390e073dbb42cc77ef2f0b5Martyn Capewell virtual void UXTB16(int cc, int Rd, int Rm, int rotate) = 0; 21696dbb4fc58fe2dcf4390e073dbb42cc77ef2f0b5Martyn Capewell 2174dc1fa8e8d1f14868ab8bba93a8cbb87f847c4e3Martyn Capewell // bit manipulation... 2184dc1fa8e8d1f14868ab8bba93a8cbb87f847c4e3Martyn Capewell virtual void UBFX(int cc, int Rd, int Rn, int lsb, int width) = 0; 2194dc1fa8e8d1f14868ab8bba93a8cbb87f847c4e3Martyn Capewell 2204f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // ----------------------------------------------------------------------- 2214f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // convenience... 2224f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // ----------------------------------------------------------------------- 2234f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 2244f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ADC(int cc, int s, int Rd, int Rn, uint32_t Op2) { 2254f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project dataProcessing(opADC, cc, s, Rd, Rn, Op2); 2264f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2274f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 2284f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ADD(int cc, int s, int Rd, int Rn, uint32_t Op2) { 2294f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project dataProcessing(opADD, cc, s, Rd, Rn, Op2); 2304f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2314f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 2324f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project AND(int cc, int s, int Rd, int Rn, uint32_t Op2) { 2334f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project dataProcessing(opAND, cc, s, Rd, Rn, Op2); 2344f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2354f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 2364f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project BIC(int cc, int s, int Rd, int Rn, uint32_t Op2) { 2374f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project dataProcessing(opBIC, cc, s, Rd, Rn, Op2); 2384f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2394f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 2404f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project EOR(int cc, int s, int Rd, int Rn, uint32_t Op2) { 2414f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project dataProcessing(opEOR, cc, s, Rd, Rn, Op2); 2424f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2434f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 2444f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project MOV(int cc, int s, int Rd, uint32_t Op2) { 2454f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project dataProcessing(opMOV, cc, s, Rd, 0, Op2); 2464f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2474f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 2484f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project MVN(int cc, int s, int Rd, uint32_t Op2) { 2494f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project dataProcessing(opMVN, cc, s, Rd, 0, Op2); 2504f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2514f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 2524f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ORR(int cc, int s, int Rd, int Rn, uint32_t Op2) { 2534f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project dataProcessing(opORR, cc, s, Rd, Rn, Op2); 2544f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2554f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 2564f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project RSB(int cc, int s, int Rd, int Rn, uint32_t Op2) { 2574f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project dataProcessing(opRSB, cc, s, Rd, Rn, Op2); 2584f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2594f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 2604f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project RSC(int cc, int s, int Rd, int Rn, uint32_t Op2) { 2614f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project dataProcessing(opRSC, cc, s, Rd, Rn, Op2); 2624f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2634f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 2644f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SBC(int cc, int s, int Rd, int Rn, uint32_t Op2) { 2654f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project dataProcessing(opSBC, cc, s, Rd, Rn, Op2); 2664f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2674f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 2684f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SUB(int cc, int s, int Rd, int Rn, uint32_t Op2) { 2694f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project dataProcessing(opSUB, cc, s, Rd, Rn, Op2); 2704f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2714f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 2724f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project TEQ(int cc, int Rn, uint32_t Op2) { 2734f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project dataProcessing(opTEQ, cc, 1, 0, Rn, Op2); 2744f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2754f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 2764f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project TST(int cc, int Rn, uint32_t Op2) { 2774f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project dataProcessing(opTST, cc, 1, 0, Rn, Op2); 2784f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2794f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 2804f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project CMP(int cc, int Rn, uint32_t Op2) { 2814f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project dataProcessing(opCMP, cc, 1, 0, Rn, Op2); 2824f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2834f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 2844f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project CMN(int cc, int Rn, uint32_t Op2) { 2854f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project dataProcessing(opCMN, cc, 1, 0, Rn, Op2); 2864f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2874f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 2884f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void SMULBB(int cc, int Rd, int Rm, int Rs) { 2894f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMUL(cc, xyBB, Rd, Rm, Rs); } 2904f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void SMULTB(int cc, int Rd, int Rm, int Rs) { 2914f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMUL(cc, xyTB, Rd, Rm, Rs); } 2924f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void SMULBT(int cc, int Rd, int Rm, int Rs) { 2934f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMUL(cc, xyBT, Rd, Rm, Rs); } 2944f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void SMULTT(int cc, int Rd, int Rm, int Rs) { 2954f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMUL(cc, xyTT, Rd, Rm, Rs); } 2964f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 2974f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void SMULWB(int cc, int Rd, int Rm, int Rs) { 2984f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMULW(cc, yB, Rd, Rm, Rs); } 2994f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void SMULWT(int cc, int Rd, int Rm, int Rs) { 3004f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMULW(cc, yT, Rd, Rm, Rs); } 3014f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 3024f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 3034f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLABB(int cc, int Rd, int Rm, int Rs, int Rn) { 3044f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLA(cc, xyBB, Rd, Rm, Rs, Rn); } 3054f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 3064f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLATB(int cc, int Rd, int Rm, int Rs, int Rn) { 3074f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLA(cc, xyTB, Rd, Rm, Rs, Rn); } 3084f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 3094f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLABT(int cc, int Rd, int Rm, int Rs, int Rn) { 3104f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLA(cc, xyBT, Rd, Rm, Rs, Rn); } 3114f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 3124f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLATT(int cc, int Rd, int Rm, int Rs, int Rn) { 3134f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLA(cc, xyTT, Rd, Rm, Rs, Rn); } 3144f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 3154f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 3164f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLALBB(int cc, int RdHi, int RdLo, int Rs, int Rm) { 3174f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLAL(cc, xyBB, RdHi, RdLo, Rs, Rm); } 3184f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 3194f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLALTB(int cc, int RdHi, int RdLo, int Rs, int Rm) { 3204f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLAL(cc, xyTB, RdHi, RdLo, Rs, Rm); } 3214f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 3224f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLALBT(int cc, int RdHi, int RdLo, int Rs, int Rm) { 3234f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLAL(cc, xyBT, RdHi, RdLo, Rs, Rm); } 3244f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 3254f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLALTT(int cc, int RdHi, int RdLo, int Rs, int Rm) { 3264f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLAL(cc, xyTT, RdHi, RdLo, Rs, Rm); } 3274f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 3284f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 3294f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLAWB(int cc, int Rd, int Rm, int Rs, int Rn) { 3304f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLAW(cc, yB, Rd, Rm, Rs, Rn); } 3314f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project inline void 3324f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLAWT(int cc, int Rd, int Rm, int Rs, int Rn) { 3334f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project SMLAW(cc, yT, Rd, Rm, Rs, Rn); } 3344f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project}; 3354f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 3364f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project}; // namespace android 3374f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 3384f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif //ANDROID_ARMASSEMBLER_INTERFACE_H 339