git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1321 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
214 lines
11 KiB
C
214 lines
11 KiB
C
/*
|
|
* Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com
|
|
*
|
|
* YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL
|
|
* UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS
|
|
* TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER
|
|
* IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD
|
|
* PARTY PATENTS.
|
|
*
|
|
* THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR
|
|
* MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING
|
|
* A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE
|
|
* FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER.
|
|
* YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW
|
|
* PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED
|
|
* AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE,
|
|
* MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM.
|
|
*
|
|
* Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
|
* either express or implied.
|
|
*
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*/
|
|
|
|
#ifndef ARM_DISASSEMBLE_FORMATS_H
|
|
#define ARM_DISASSEMBLE_FORMATS_H
|
|
|
|
//
|
|
// These are placeholders in disassembly decoder
|
|
//
|
|
#define EMIT_R1 '\001'
|
|
#define EMIT_R2 '\002'
|
|
#define EMIT_R3 '\003'
|
|
#define EMIT_R4 '\004'
|
|
#define EMIT_CU '\005'
|
|
#define EMIT_CS '\006'
|
|
#define EMIT_CX '\007'
|
|
#define EMIT_T '\010'
|
|
#define EMIT_SHIFT '\011'
|
|
#define EMIT_SHIFT_C '\012'
|
|
#define EMIT_CPNUM '\013'
|
|
#define EMIT_COP1 '\014'
|
|
#define EMIT_COP2 '\015'
|
|
#define EMIT_CR1 '\016'
|
|
#define EMIT_CR2 '\017'
|
|
#define EMIT_CR3 '\020'
|
|
#define EMIT_OPT '\021'
|
|
#define EMIT_WB '\022'
|
|
#define EMIT_RLIST '\023'
|
|
#define EMIT_U '\024'
|
|
#define EMIT_SR '\025'
|
|
#define EMIT_FLAGS '\026'
|
|
#define EMIT_OPT_MODE '\027'
|
|
#define EMIT_LIM '\031'
|
|
#define EMIT_WIDTH '\032'
|
|
#define EMIT_ITC '\033'
|
|
#define EMIT_SZSHIFT '\034'
|
|
#define EMIT_R1F '\035'
|
|
#define EMIT_FPSCR '\036'
|
|
#define EMIT_S1 '\302'
|
|
#define EMIT_S2 '\303'
|
|
#define EMIT_S3 '\304'
|
|
#define EMIT_D1 '\305'
|
|
#define EMIT_D2 '\306'
|
|
#define EMIT_D3 '\307'
|
|
#define EMIT_Z1 '\313'
|
|
#define EMIT_Z2 '\314'
|
|
#define EMIT_SS1 '\316'
|
|
#define EMIT_SS3 '\317'
|
|
#define EMIT_C0F '\324'
|
|
#define EMIT_SDFP_MI '\325'
|
|
#define EMIT_SIMD_RL '\326'
|
|
#define EMIT_VFP_RL '\327'
|
|
|
|
//
|
|
// These are placeholders in disassembly format strings
|
|
//
|
|
#define EMIT_R1_S "\001"
|
|
#define EMIT_R2_S "\002"
|
|
#define EMIT_R3_S "\003"
|
|
#define EMIT_R4_S "\004"
|
|
#define EMIT_CU_S "\005"
|
|
#define EMIT_CS_S "\006"
|
|
#define EMIT_CX_S "\007"
|
|
#define EMIT_T_S "\010"
|
|
#define EMIT_SHIFT_S "\011"
|
|
#define EMIT_SHIFT_C_S "\012"
|
|
#define EMIT_CPNUM_S "\013"
|
|
#define EMIT_COP1_S "\014"
|
|
#define EMIT_COP2_S "\015"
|
|
#define EMIT_CR1_S "\016"
|
|
#define EMIT_CR2_S "\017"
|
|
#define EMIT_CR3_S "\020"
|
|
#define EMIT_OPT_S "\021"
|
|
#define EMIT_WB_S "\022"
|
|
#define EMIT_RLIST_S "\023"
|
|
#define EMIT_U_S "\024"
|
|
#define EMIT_SR_S "\025"
|
|
#define EMIT_FLAGS_S "\026"
|
|
#define EMIT_OPT_MODE_S "\027"
|
|
#define EMIT_LIM_S "\031"
|
|
#define EMIT_WIDTH_S "\032"
|
|
#define EMIT_ITC_S "\033"
|
|
#define EMIT_SZSHIFT_S "\034"
|
|
#define EMIT_R1F_S "\035"
|
|
#define EMIT_FPSCR_S "\036"
|
|
#define EMIT_S1_S "\302"
|
|
#define EMIT_S2_S "\303"
|
|
#define EMIT_S3_S "\304"
|
|
#define EMIT_D1_S "\305"
|
|
#define EMIT_D2_S "\306"
|
|
#define EMIT_D3_S "\307"
|
|
#define EMIT_Z1_S "\313"
|
|
#define EMIT_Z2_S "\314"
|
|
#define EMIT_SS1_S "\316"
|
|
#define EMIT_SS3_S "\317"
|
|
#define EMIT_C0F_S "\324"
|
|
#define EMIT_SDFP_MI_S "\325"
|
|
#define EMIT_SIMD_RL_S "\326"
|
|
#define EMIT_VFP_RL_S "\327"
|
|
|
|
//
|
|
// These are disassembly format strings
|
|
//
|
|
#define FMT_NONE ""
|
|
#define FMT_R1 EMIT_R1_S
|
|
#define FMT_R1_R2 EMIT_R1_S "," EMIT_R2_S
|
|
#define FMT_R1_R2_R3 EMIT_R1_S "," EMIT_R2_S "," EMIT_R3_S
|
|
#define FMT_R1_R2_R3_R4 EMIT_R1_S "," EMIT_R2_S "," EMIT_R3_S "," EMIT_R4_S
|
|
#define FMT_XIMM EMIT_CX_S
|
|
#define FMT_SIMM EMIT_CS_S
|
|
#define FMT_UIMM EMIT_CU_S
|
|
#define FMT_R1_SIMM EMIT_R1_S "," EMIT_CS_S
|
|
#define FMT_R1_UIMM EMIT_R1_S "," EMIT_CU_S
|
|
#define FMT_R1_R2_SIMM EMIT_R1_S "," EMIT_R2_S "," EMIT_CS_S
|
|
#define FMT_R1_R2_UIMM EMIT_R1_S "," EMIT_R2_S "," EMIT_CU_S
|
|
#define FMT_R1_R2_SHIFT_SIMM EMIT_R1_S "," EMIT_R2_S "," EMIT_SHIFT_C_S
|
|
#define FMT_R1_R2_SHIFT_R3 EMIT_R1_S "," EMIT_R2_S "," EMIT_SHIFT_S " " EMIT_R3_S
|
|
#define FMT_R1_R2_SHIFT EMIT_R1_S "," EMIT_R2_S "," EMIT_SHIFT_S
|
|
#define FMT_R1_R2_R3_SHIFT_SIMM EMIT_R1_S "," EMIT_R2_S "," EMIT_R3_S "," EMIT_SHIFT_C_S
|
|
#define FMT_R1_R2_R3_SHIFT_R4 EMIT_R1_S "," EMIT_R2_S "," EMIT_R3_S "," EMIT_SHIFT_S " " EMIT_R4_S
|
|
#define FMT_R1_R2_R3_SHIFT EMIT_R1_S "," EMIT_R2_S "," EMIT_R3_S "," EMIT_SHIFT_S
|
|
#define FMT_R1_WIDTH_R2 EMIT_R1_S "," EMIT_WIDTH_S "," EMIT_R2_S
|
|
#define FMT_R1_WIDTH_R2_SHIFT_SIMM EMIT_R1_S "," EMIT_WIDTH_S "," EMIT_R2_S "," EMIT_SHIFT_C_S
|
|
#define FMT_R1_ADDR_R2_SIMM EMIT_R1_S ",[" EMIT_R2_S "1],*" EMIT_CS_S "2]" EMIT_WB_S
|
|
#define FMT_R1_ADDR_R2_R3 EMIT_R1_S ",[" EMIT_R2_S "1]," EMIT_U_S EMIT_R3_S "2]" EMIT_WB_S
|
|
#define FMT_R1_ADDR_R2_R3_SHIFT_SIMM EMIT_R1_S ",[" EMIT_R2_S "1]," EMIT_U_S EMIT_R3_S "," EMIT_SHIFT_C_S "2]" EMIT_WB_S
|
|
#define FMT_R1_ADDR_R2_R3_SHIFT EMIT_R1_S ",[" EMIT_R2_S "1]," EMIT_U_S EMIT_R3_S "," EMIT_SHIFT_S "2]" EMIT_WB_S
|
|
#define FMT_R1_R4_ADDR_R2_SIMM EMIT_R1_S "," EMIT_R4_S ",[" EMIT_R2_S "1],*" EMIT_CS_S "2]" EMIT_WB_S
|
|
#define FMT_ADDR_R1_SIMM "[" EMIT_R1_S "1],*" EMIT_CS_S "2]" EMIT_WB_S
|
|
#define FMT_ADDR_R1_R2 "[" EMIT_R1_S "1]," EMIT_U_S EMIT_R2_S "2]" EMIT_WB_S
|
|
#define FMT_ADDR_R1_R2_SHIFT_SIMM "[" EMIT_R1_S "1]," EMIT_U_S EMIT_R2_S "," EMIT_SHIFT_C_S "2]" EMIT_WB_S
|
|
#define FMT_ADDR_R1_R2_SHIFT "[" EMIT_R1_S "1]," EMIT_U_S EMIT_R2_S "," EMIT_SHIFT_S "2]" EMIT_WB_S
|
|
#define FMT_R1_R2_ADDR_R3_SIMM EMIT_R1_S "," EMIT_R2_S ",[" EMIT_R3_S "1],*" EMIT_CS_S "2]"
|
|
#define FMT_R1_R2_R4_ADDR_R3_SIMM EMIT_R1_S "," EMIT_R2_S "," EMIT_R4_S ",[" EMIT_R3_S "1],*" EMIT_CS_S "2]"
|
|
#define FMT_R1_R4_ADDR_R2_SIMM EMIT_R1_S "," EMIT_R4_S ",[" EMIT_R2_S "1],*" EMIT_CS_S "2]" EMIT_WB_S
|
|
#define ADDR_R1_R2_SZSHIFT ",[" EMIT_R1_S "," EMIT_R2_S ",*" EMIT_SZSHIFT_S "]"
|
|
#define FMT_CPNUM_CR1_SIMM EMIT_CPNUM_S "," EMIT_CR1_S ",[" EMIT_R2_S "1],*" EMIT_CS_S "2]" EMIT_WB_S
|
|
#define FMT_CPNUM_CR1_UNINDEXED EMIT_CPNUM_S "," EMIT_CR1_S ",[" EMIT_R2_S "],{" EMIT_OPT_S "}"
|
|
#define FMT_SR_R1 EMIT_SR_S "," EMIT_R1_S
|
|
#define FMT_R1_SR EMIT_R1_S "," EMIT_SR_S
|
|
#define FMT_R1_WB EMIT_R1_S EMIT_WB_S
|
|
#define FMT_R1_WB_UIMM EMIT_R1_S EMIT_WB_S "," EMIT_CU_S
|
|
#define FMT_T EMIT_T_S
|
|
#define FMT_R1_T EMIT_R1_S "," EMIT_T_S
|
|
#define FMT_CPNUM_COP1_CR1_CR2_CR3_COP2 EMIT_CPNUM_S "," EMIT_COP1_S "," EMIT_CR1_S "," EMIT_CR2_S "," EMIT_CR3_S ",{" EMIT_COP2_S "}"
|
|
#define FMT_CPNUM_COP1_R1_R2_CR3 EMIT_CPNUM_S "," EMIT_COP1_S "," EMIT_R1_S "," EMIT_R2_S "," EMIT_CR3_S
|
|
#define FMT_CPNUM_COP1_R1_CR2_CR3_COP2 EMIT_CPNUM_S "," EMIT_COP1_S "," EMIT_R1_S "," EMIT_CR2_S "," EMIT_CR3_S ",{" EMIT_COP2_S "}"
|
|
#define FMT_CPNUM_COP1_R1F_CR2_CR3_COP2 EMIT_CPNUM_S "," EMIT_COP1_S "," EMIT_R1F_S "," EMIT_CR2_S "," EMIT_CR3_S ",{" EMIT_COP2_S "}"
|
|
#define FMT_RLIST EMIT_RLIST_S
|
|
#define FMT_SIMD_RL EMIT_SIMD_RL_S
|
|
#define FMT_VFP_RL EMIT_VFP_RL_S
|
|
#define FMT_R1_RLIST EMIT_R1_S EMIT_WB_S "," EMIT_RLIST_S
|
|
#define FMT_R1_RLIST_T EMIT_R1_S "!," EMIT_RLIST_S
|
|
#define FMT_R1_RLIST_UM EMIT_R1_S EMIT_WB_S "," EMIT_RLIST_S "^"
|
|
#define FMT_R1_VFP_RL EMIT_R1_S EMIT_WB_S "," EMIT_VFP_RL_S
|
|
#define FMT_R1_SIMD_RL EMIT_R1_S EMIT_WB_S "," EMIT_SIMD_RL_S
|
|
#define FMT_FLAGS_OPT_MODE EMIT_FLAGS_S ",*" EMIT_OPT_MODE_S
|
|
#define FMT_LIM EMIT_LIM_S
|
|
#define FMT_R1_R2_LSB_WIDTH EMIT_R1_S "," EMIT_R2_S "," EMIT_CU_S "," EMIT_WIDTH_S
|
|
#define FMT_R1_LSB_WIDTH EMIT_R1_S "," EMIT_CU_S "," EMIT_WIDTH_S
|
|
#define FMT_ITC EMIT_ITC_S
|
|
#define FMT_R1_FPSCR EMIT_R1F_S "," EMIT_FPSCR_S
|
|
#define FMT_FPSCR_R1 EMIT_FPSCR_S "," EMIT_R1_S
|
|
#define FMT_R1_S2 EMIT_R1_S "," EMIT_S2_S
|
|
#define FMT_R1_Z2 EMIT_R1_S "," EMIT_Z2_S
|
|
#define FMT_S1_F0 EMIT_S1_S "," EMIT_C0F_S
|
|
#define FMT_S1_S2 EMIT_S1_S "," EMIT_S2_S
|
|
#define FMT_S1_R2 EMIT_S1_S "," EMIT_R2_S
|
|
#define FMT_S1_S2_S3 EMIT_S1_S "," EMIT_S2_S "," EMIT_S3_S
|
|
#define FMT_S1_S2_UIMM EMIT_S1_S "," EMIT_S2_S "," EMIT_CU_S
|
|
#define FMT_S1_SDFP_MI EMIT_S1_S "," EMIT_SDFP_MI_S
|
|
#define FMT_S1_ADDR_R2_SIMM EMIT_S1_S ",[" EMIT_R2_S "1],*" EMIT_CS_S "2]"
|
|
#define FMT_S1_SDFP_MI EMIT_S1_S "," EMIT_SDFP_MI_S
|
|
#define FMT_Z1_R2 EMIT_Z1_S "," EMIT_R2_S
|
|
#define FMT_R1_R2_D3 EMIT_R1_S "," EMIT_R2_S "," EMIT_D3_S
|
|
#define FMT_D1_R2_R3 EMIT_D1_S "," EMIT_R2_S "," EMIT_R3_S
|
|
#define FMT_D1_ADDR_R2_SIMM EMIT_D1_S ",[" EMIT_R2_S "1],*" EMIT_CS_S "2]"
|
|
#define FMT_R1_R2_SS3 EMIT_R1_S "," EMIT_R2_S "," EMIT_SS3_S
|
|
#define FMT_SS1_R2_R3 EMIT_SS1_S "," EMIT_R2_S "," EMIT_R3_S
|
|
|
|
|
|
#endif
|