ARMAssemblerProxy.h revision 4f6e8d7a00cbeda1e70cc15be9c4af1018bdad5
14f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project/* libs/pixelflinger/codeflinger/ARMAssemblerProxy.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_PROXY_H
204f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define ANDROID_ARMASSEMBLER_PROXY_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 Project#include "codeflinger/ARMAssemblerInterface.h"
264f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project
274f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectnamespace android {
284f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project
294f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project// ----------------------------------------------------------------------------
304f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project
314f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectclass ARMAssemblerProxy : public ARMAssemblerInterface
324f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project{
334f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectpublic:
344f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    // ARMAssemblerProxy take ownership of the target
354f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project
364f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                ARMAssemblerProxy();
374f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                ARMAssemblerProxy(ARMAssemblerInterface* target);
384f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual     ~ARMAssemblerProxy();
394f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project
404f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    void setTarget(ARMAssemblerInterface* target);
414f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project
424f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void    reset();
434f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual int     generate(const char* name);
444f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void    disassemble(const char* name);
454f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project
464f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void    prolog();
474f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void    epilog(uint32_t touched);
484f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void    comment(const char* string);
494f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project
504f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void    dataProcessing(int opcode, int cc, int s,
514f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                                int Rd, int Rn,
524f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                                uint32_t Op2);
534f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void MLA(int cc, int s,
544f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int Rd, int Rm, int Rs, int Rn);
554f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void MUL(int cc, int s,
564f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int Rd, int Rm, int Rs);
574f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void UMULL(int cc, int s,
584f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int RdLo, int RdHi, int Rm, int Rs);
594f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void UMUAL(int cc, int s,
604f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int RdLo, int RdHi, int Rm, int Rs);
614f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void SMULL(int cc, int s,
624f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int RdLo, int RdHi, int Rm, int Rs);
634f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void SMUAL(int cc, int s,
644f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int RdLo, int RdHi, int Rm, int Rs);
654f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project
664f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void B(int cc, uint32_t* pc);
674f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void BL(int cc, uint32_t* pc);
684f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void BX(int cc, int Rn);
694f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void label(const char* theLabel);
704f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void B(int cc, const char* label);
714f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void BL(int cc, const char* label);
724f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project
734f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    uint32_t* pcForLabel(const char* label);
744f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project
754f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void LDR (int cc, int Rd,
764f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int Rn, uint32_t offset = immed12_pre(0));
774f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void LDRB(int cc, int Rd,
784f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int Rn, uint32_t offset = immed12_pre(0));
794f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void STR (int cc, int Rd,
804f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int Rn, uint32_t offset = immed12_pre(0));
814f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void STRB(int cc, int Rd,
824f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int Rn, uint32_t offset = immed12_pre(0));
834f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void LDRH (int cc, int Rd,
844f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int Rn, uint32_t offset = immed8_pre(0));
854f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void LDRSB(int cc, int Rd,
864f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int Rn, uint32_t offset = immed8_pre(0));
874f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void LDRSH(int cc, int Rd,
884f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int Rn, uint32_t offset = immed8_pre(0));
894f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void STRH (int cc, int Rd,
904f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int Rn, uint32_t offset = immed8_pre(0));
914f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void LDM(int cc, int dir,
924f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int Rn, int W, uint32_t reg_list);
934f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void STM(int cc, int dir,
944f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int Rn, int W, uint32_t reg_list);
954f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project
964f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void SWP(int cc, int Rn, int Rd, int Rm);
974f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void SWPB(int cc, int Rn, int Rd, int Rm);
984f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void SWI(int cc, uint32_t comment);
994f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project
1004f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void PLD(int Rn, uint32_t offset);
1014f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void CLZ(int cc, int Rd, int Rm);
1024f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void QADD(int cc, int Rd, int Rm, int Rn);
1034f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void QDADD(int cc, int Rd, int Rm, int Rn);
1044f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void QSUB(int cc, int Rd, int Rm, int Rn);
1054f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void QDSUB(int cc, int Rd, int Rm, int Rn);
1064f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void SMUL(int cc, int xy,
1074f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int Rd, int Rm, int Rs);
1084f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void SMULW(int cc, int y,
1094f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int Rd, int Rm, int Rs);
1104f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void SMLA(int cc, int xy,
1114f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int Rd, int Rm, int Rs, int Rn);
1124f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void SMLAL(int cc, int xy,
1134f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int RdHi, int RdLo, int Rs, int Rm);
1144f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    virtual void SMLAW(int cc, int y,
1154f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project                int Rd, int Rm, int Rs, int Rn);
1164f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project
1174f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectprivate:
1184f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project    ARMAssemblerInterface*  mTarget;
1194f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project};
1204f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project
1214f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project}; // namespace android
1224f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project
1234f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif //ANDROID_ARMASSEMBLER_PROXY_H
124