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

343 lines
8.4 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_arm.h 271 2005-08-09 08:31:35Z picard $
*
* The Core Pocket Media Player
* Copyright (c) 2004-2005 Gabor Kovacs
*
****************************************************************************/
#ifndef __DYNCODE_ARM_H
#define __DYNCODE_ARM_H
#ifdef ARM
#define DYNCODE
#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 SP 13
#define R14 14
#define PC 15
#define LR 14
#define EQ 0
#define NE 1
#define CS 2
#define CC 3
#define MI 4
#define PL 5
#define VS 6
#define VC 7
#define HI 8
#define LS 9
#define GE 10
#define LT 11
#define GT 12
#define LE 13
#define AL 14
#define LSL 0
#define LSR 1
#define ASR 2
#define ROR 3
#define AND 0
#define EOR 1
#define SUB 2
#define RSB 3
#define ADD 4
#define ADC 5
#define SBC 6
#define RSC 7
#define TST 8
#define TEQ 9
#define CMP 10
#define CMN 11
#define ORR 12
#define MOV 13
#define BIC 14
#define MVN 15
#define MUL 16
#define MLA 17
#define QADD 18
#define QSUB 19
#define QDADD 20
#define QDSUB 21
#define LDR 22
#define STR 23
#define LDR_POST 24
#define STR_POST 25
#define LDR_PRE 26
#define STR_PRE 27
#define LDR_POSTSUB 28
#define STR_POSTSUB 29
#define LDR_PRESUB 30
#define STR_PRESUB 31
#define B 32
#define BL 33
#define PLD 34
#define PLD_POST 35
#define PLD_PRE 36
#define PLD_POSTSUB 37
#define PLD_PRESUB 38
#define WR0 (0+16)
#define WR1 (1+16)
#define WR2 (2+16)
#define WR3 (3+16)
#define WR4 (4+16)
#define WR5 (5+16)
#define WR6 (6+16)
#define WR7 (7+16)
#define WR8 (8+16)
#define WR9 (9+16)
#define WR10 (10+16)
#define WR11 (11+16)
#define WR12 (12+16)
#define WR13 (13+16)
#define WR14 (14+16)
#define WR15 (15+16)
#define WCID (0+32)
#define WCSSF (2+32)
#define WCASF (3+32)
#define WCGR0 (8+32)
#define WCGR1 (9+32)
#define WCGR2 (10+32)
#define WCGR3 (11+32)
//mode
//1: I2 rd:16,rn:12
//2: I2C rd:16,rn:12,imm[3]:0
//4: I3 rd:0,rnlo:12,rnhi:16
//6: I2 rd:12,rn:16
//7: I3 rd:12,rn:16,rm:0
//8: I3C rd:12,rn:16,rm:0,imm[3]:20
//9: I2C rd:12,rn:16,imm[8]:0|20
//F: I2C,I1P rd:12,rn:16,imm[8]:0 (w or q *4)
#define TBCSTB 0x1E400010
#define TBCSTH 0x1E400050
#define TBCSTW 0x1E400090
#define TINSRB 0x2E600010
#define TINSRH 0x2E600050
#define TINSRW 0x2E600090
#define TMCR 0x1E000110
#define TMCRR 0x4C400000
#define TMRC 0x6E100110
#define TMRRC 0x7C500000
#define WACCB 0x6E0001C0
#define WACCH 0x6E4001C0
#define WACCW 0x6E8001C0
#define WADDB 0x7E000180
#define WADDH 0x7E400180
#define WADDW 0x7E800180
#define WADDBUS 0x7E100180
#define WADDHUS 0x7E500180
#define WADDWUS 0x7E900180
#define WADDBSS 0x7E300180
#define WADDHSS 0x7E700180
#define WADDWSS 0x7EB00180
#define WALIGNI 0x8E000020
#define WALIGNR0 0x7E800020
#define WALIGNR1 0x7E900020
#define WALIGNR2 0x7EA00020
#define WALIGNR3 0x7EB00020
#define WAND 0x7E200000
#define WANDN 0x7E300000
#define WAVG2B 0x7E800000
#define WAVG2H 0x7EC00000
#define WAVG2BR 0x7E900000
#define WAVG2HR 0x7ED00000
#define WCMPEQB 0x7E000060
#define WCMPEQH 0x7E400060
#define WCMPEQW 0x7E800060
#define WCMPGTUB 0x7E100060
#define WCMPGTUH 0x7E500060
#define WCMPGTUW 0x7E900060
#define WCMPGTSB 0x7E300060
#define WCMPGTSH 0x7E700060
#define WCMPGTSW 0x7EB00060
#define WLDRB 0xFD900000
#define WLDRH 0xFDD00000
#define WLDRW 0xFD900100
#define WLDRD 0xFDD00100
#define WSTRB 0xFD800000
#define WSTRH 0xFDC00000
#define WSTRW 0xFD800100
#define WSTRD 0xFDC00100
#define WLDRB_PRE 0xFDB00000
#define WLDRH_PRE 0xFDF00000
#define WLDRW_PRE 0xFDB00100
#define WLDRD_PRE 0xFDF00100
#define WSTRB_PRE 0xFDA00000
#define WSTRH_PRE 0xFDE00000
#define WSTRW_PRE 0xFDA00100
#define WSTRD_PRE 0xFDE00100
#define WLDRB_PRESUB 0xFD300000
#define WLDRH_PRESUB 0xFD700000
#define WLDRW_PRESUB 0xFD300100
#define WLDRD_PRESUB 0xFD700100
#define WSTRB_PRESUB 0xFD200000
#define WSTRH_PRESUB 0xFD600000
#define WSTRW_PRESUB 0xFD200100
#define WSTRD_PRESUB 0xFD600100
#define WLDRB_POST 0xFCB00000
#define WLDRH_POST 0xFCF00000
#define WLDRW_POST 0xFCB00100
#define WLDRD_POST 0xFCF00100
#define WSTRB_POST 0xFCA00000
#define WSTRH_POST 0xFCE00000
#define WSTRW_POST 0xFCA00100
#define WSTRD_POST 0xFCE00100
#define WLDRB_POSTSUB 0xFC300000
#define WLDRH_POSTSUB 0xFC700000
#define WLDRW_POSTSUB 0xFC300100
#define WLDRD_POSTSUB 0xFC700100
#define WSTRB_POSTSUB 0xFC200000
#define WSTRH_POSTSUB 0xFC600000
#define WSTRW_POSTSUB 0xFC200100
#define WSTRD_POSTSUB 0xFC600100
#define WMACU 0x7E400100
#define WMACS 0x7E600100
#define WMACUZ 0x7E500100
#define WMACSZ 0x7E700100
#define WMADDU 0x7E800100
#define WMADDS 0x7EA00100
#define WMAXUB 0x7E000160
#define WMAXUH 0x7E400160
#define WMAXUW 0x7E800160
#define WMAXSB 0x7E200160
#define WMAXSH 0x7E600160
#define WMAXSW 0x7EA00160
#define WMINUB 0x7E100160
#define WMINUH 0x7E500160
#define WMINUW 0x7E900160
#define WMINSB 0x7E300160
#define WMINSH 0x7E700160
#define WMINSW 0x7EB00160
#define WMULUL 0x7E000100
#define WMULUM 0x7E100100
#define WMULSL 0x7E200100
#define WMULSM 0x7E300100
#define WOR 0x7E000000
#define WPACKHUS 0x7E500080
#define WPACKWUS 0x7E900080
#define WPACKDUS 0x7ED00080
#define WPACKHSS 0x7E700080
#define WPACKWSS 0x7EB00080
#define WPACKDSS 0x7EF00080
#define WRORH 0x7E700040
#define WRORW 0x7EB00040
#define WRORD 0x7EF00040
#define WRORHG 0x7E700140
#define WRORWG 0x7EB00140
#define WRORDG 0x7EF00140
#define WSADB 0x7E000120
#define WSADBZ 0x7E100120
#define WSADH 0x7E400120
#define WSADHZ 0x7E500120
#define WSHUFH 0x9E0001E0
#define WSLLH 0x7E500040
#define WSLLW 0x7E900040
#define WSLLD 0x7ED00040
#define WSLLHG 0x7E500140
#define WSLLWG 0x7E900140
#define WSLLDG 0x7ED00140
#define WSRAH 0x7E400040
#define WSRAW 0x7E800040
#define WSRAD 0x7EC00040
#define WSRAHG 0x7E400140
#define WSRAWG 0x7E800140
#define WSRADG 0x7EC00140
#define WSRLH 0x7E600040
#define WSRLW 0x7EA00040
#define WSRLD 0x7EE00040
#define WSRLHG 0x7E600140
#define WSRLWG 0x7EA00140
#define WSRLDG 0x7EE00140
#define WSUBB 0x7E0001A0
#define WSUBH 0x7E4001A0
#define WSUBW 0x7E8001A0
#define WSUBBUS 0x7E1001A0
#define WSUBHUS 0x7E5001A0
#define WSUBWUS 0x7E9001A0
#define WSUBBSS 0x7E3001A0
#define WSUBHSS 0x7E7001A0
#define WSUBWSS 0x7EB001A0
#define WUNPCKEHUB 0x6E0000C0
#define WUNPCKEHUH 0x6E4000C0
#define WUNPCKEHUW 0x6E8000C0
#define WUNPCKEHSB 0x6E2000C0
#define WUNPCKEHSH 0x6E6000C0
#define WUNPCKEHSW 0x6EA000C0
#define WUNPCKIHB 0x7E1000C0
#define WUNPCKIHH 0x7E5000C0
#define WUNPCKIHW 0x7E9000C0
#define WUNPCKELUB 0x6E0000E0
#define WUNPCKELUH 0x6E4000E0
#define WUNPCKELUW 0x6E8000E0
#define WUNPCKELSB 0x6E2000E0
#define WUNPCKELSH 0x6E6000E0
#define WUNPCKELSW 0x6EA000E0
#define WUNPCKILB 0x7E1000E0
#define WUNPCKILH 0x7E5000E0
#define WUNPCKILW 0x7E9000E0
#define WXOR 0x7E100000
void C(int);
void S();
void Byte();
void Half();
void SByte();
void SHalf();
void IConst(reg Dest, int Const);
void IMul(reg Dest, reg Op1, int Mul);
void I3(int, reg Dest, reg Op1, reg Op2);
void I3C(int, reg Dest, reg Op1, reg Op2, int Const);
void I3S(int, reg Dest, reg Op1, reg Op2, int ShiftType, int Shift);
void I4(int, reg Dest, reg Op1, reg Op2, reg Op3);
void I2(int, reg Dest, reg Op1);
void I2C(int, reg Dest, reg Op1, int Const);
void I1P(int, reg Dest, dyninst* Block, int Ofs);
void I0P(int, int Cond, dyninst*);
void Break();
void CodeBegin();
void CodeEnd();
#endif
#endif