gps/GPSResources/tcpmp/common/dyncode/dyncode_sh3.h

198 lines
5.2 KiB
C
Raw Normal View History

2019-05-01 12:32:35 +00:00
/*****************************************************************************
*
* This program is free software ; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* $Id: dyncode_sh3.h 271 2005-08-09 08:31:35Z picard $
*
* The Core Pocket Media Player
* Copyright (c) 2004-2005 Gabor Kovacs
*
****************************************************************************/
#ifndef __DYNCODE_SH3_H
#define __DYNCODE_SH3_H
#ifdef SH3
#define DYNCODE
//R0 result
//R4-R7 a0-a3 argument
//R15 sp stack pointer
#define STACKFRAME 10
#define R0 0
#define R1 1
#define R2 2
#define R3 3
#define R4 4
#define R5 5
#define R6 6
#define R7 7
#define R8 8
#define R9 9
#define R10 10
#define R11 11
#define R12 12
#define R13 13
#define R14 14
#define R15 15
#define MACL 16
#define MACH 17
#define PR 18
#define PC 19
#define GBR 20
#define SP 15
#define MOVI 0x0100E000
#define MOVW_PC 0x01019000
#define MOVL_PC 0x0102D000
#define MOV 0x02136003
#define MOVB_ST 0x00332000
#define MOVW_ST 0x00332001
#define MOVL_ST 0x00332002
#define MOVB_LD 0x02136000
#define MOVW_LD 0x02136001
#define MOVL_LD 0x02136002
#define MOVB_STSUB 0x02332004
#define MOVW_STSUB 0x02332005
#define MOVL_STSUB 0x02332006
#define MOVB_LDADD 0x03136004
#define MOVW_LDADD 0x03136005
#define MOVL_LDADD 0x03136006
#define MOVB_STOFS 0x00548000 /*R0*/
#define MOVW_STOFS 0x00558100 /*R0*/
#define MOVL_STOFS 0x00361000
#define MOVB_LDOFS 0x04148400 /*R0*/
#define MOVW_LDOFS 0x04158500 /*R0*/
#define MOVL_LDOFS 0x02165000
#define MOVB_STR0 0x00730004
#define MOVW_STR0 0x00730005
#define MOVL_STR0 0x00730006
#define MOVB_LDR0 0x0253000C
#define MOVW_LDR0 0x0253000D
#define MOVL_LDR0 0x0253000E
#define MOVT 0x01870029
#define SWAPB 0x02136008
#define SWAPW 0x02136009
#define XTRCT 0x0233200D
#define ADD 0x0233300C
#define ADDI 0x01107000
#define ADDC 0x0AB3300E
#define ADDV 0x0A33300F
#define CMPEQI 0x08488800 /*R0*/
#define CMPEQ 0x08333000
#define CMPHS 0x08333002
#define CMPGE 0x08333003
#define CMPHI 0x08333006
#define CMPGT 0x08333007
#define CMPPZ 0x08174011
#define CMPPL 0x08174015
#define CMPSTR 0x0833200C
#define DMULSL 0x4033300D
#define DMULUL 0x40333005
#define DT 0x09174010
#define EXTSB 0x0213600E
#define EXTSW 0x0213600F
#define EXTUB 0x0213600C
#define EXTUW 0x0213600D
#define MAC_L 0x5333000F
#define MAC_W 0x5333400F
#define MULL 0x40330007
#define MULSW 0x4033200F
#define MULUW 0x4033200E
#define NEG 0x0213600B
#define NEGC 0x0A93600A
#define SUB 0x02333008
#define SUBC 0x0AB3300A
#define SUBV 0x0A33300B
#define AND 0x02332009
#define ANDI 0x0448C900 /*R0*/
#define NOT 0x02136007
#define OR 0x0233200B
#define ORI 0x0448CB00 /*R0*/
#define TST 0x08332008
#define TSTI 0x0848C800 /*R0*/
#define XOR 0x0233200A
#define XORI 0x0448CA00 /*R0*/
#define ROTL 0x09174004
#define ROTR 0x09174005
#define ROTCL 0x09974024
#define ROTCR 0x09974025
#define SHAD 0x0233400C
#define SHAL 0x09174020
#define SHAR 0x09174021
#define SHLD 0x0233400D
#define SHLL 0x09174000
#define SHLR 0x09174001
#define SHLL2 0x01174008
#define SHLR2 0x01174009
#define SHLL8 0x01174018
#define SHLR8 0x01174019
#define SHLL16 0x01174028
#define SHLR16 0x01174029
#define BF 0x008A8B00
#define BFS 0x008A8F00
#define BT 0x008A8900
#define BTS 0x008A8D00
#define BRA 0x008BA000
#define BRAF 0x008C0023
#define BSR 0x808BB000
#define BSRF 0x808C0003
#define JMP 0x000C402B
#define JSR 0x800C400B
#define RTS 0x200D000B
#define CLRMAC 0x40090028
#define CLRT 0x08090048
#define PREF 0x00070083
#define SETT 0x08090018
#define LDS_MACH 0x4017400A
#define LDS_MACL 0x4017401A
#define LDS_PR 0x8017402A
#define LDS_LDADD_MACH 0x41174006
#define LDS_LDADD_MACL 0x41174016
#define LDS_LDADD_PR 0x81174026
#define STS_MACH 0x1107000A
#define STS_MACL 0x1107001A
#define STS_PR 0x2107002A
#define STS_LDADD_MACH 0x11174002
#define STS_LDADD_MACL 0x11174012
#define STS_LDADD_PR 0x21174022
void IShift(reg Rn, reg Tmp, int Left);
void I0(int Code);
void I0C(int Code, int Const);
void I1(int Code, reg Rn);
void I1C(int Code, reg Rn, int Const);
void I2(int Code, reg Rm, reg Rn);
void I2C(int Code, reg Rm, reg Rn, int Const);
void I0P(int Code, dyninst* Block);
void I1P(int Code, reg Reg, dyninst* Block, int Ofs);
dyninst* ICode(dyninst* Block, int Ofs);
void CodeBegin(int Save,int Local);
void CodeEnd(int Save,int Local);
void NOP();
void Break();
#endif
#endif