fpc/compiler/arm/armins.dat
Károly Balogh b67e4fb8b3 added the ADR ARM pseudo instruction to instruction list
git-svn-id: trunk@25936 -
2013-11-05 13:16:33 +00:00

798 lines
14 KiB
Plaintext

;
; Table of assembler instructions for Free Pascal
; adapted from Netwide Assembler by Florian Klaempfl
;
;
; The Netwide Assembler is copyright (C) 1996 Simon Tatham and
; Julian Hall. All rights reserved. The software is
; redistributable under the licence given in the file "Licence"
; distributed in the NASM archive.
;
; Format of file: all four fields must be present on every functional
; line. Hence `void' for no-operand instructions, and `\0' for such
; as EQU. If the last three fields are all `ignore', no action is
; taken except to register the opcode as being present.
;
;
; 'ignore' means no instruc
; 'void' means instruc with zero operands
;
; Third field has a first byte indicating how to
; put together the bits, and then some codes
; that may be used at will (see assemble.c)
;
; \1 - 24 bit pc-rel offset [B, BL]
; \2 - 24 bit imm value [SWI]
; \3 - 3 byte code [BX]
;
; \4 - reg,reg,reg [AND,EOR,SUB,RSB,ADD,ADC,SBC,RSC,ORR,BIC]
; \5 - reg,reg,reg,<shift>reg [-"-]
; \6 - reg,reg,reg,<shift>#imm [-"-]
; \7 - reg,reg,#imm [-"-]
;
; \x8 - reg,reg [MOV,MVN]
; \x9 - reg,reg,<shift>reg [-"-]
; \xA - reg,reg,<shift>#imm [-"-]
; \xB - reg,#imm [-"-]
;
; \xC - reg,reg [CMP,CMN,TEQ,TST]
; \xD - reg,reg,<shift>reg [-"-]
; \xE - reg,reg,<shift>#imm [-"-]
; \xF - reg,#imm [-"-]
;
; \xFx - floating point instructions
; Floating point instruction format information, taken from the linux kernel,
; for detailed tables, see aasmcpu.pas
;
; ARM Floating Point Instruction Classes
; | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
; |c o n d|1 1 0 P|U|u|W|L| Rn |v| Fd |0|0|0|1| o f f s e t | CPDT
; |c o n d|1 1 0 P|U|w|W|L| Rn |x| Fd |0|0|1|0| o f f s e t | CPDT (copro 2)
; | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
; |c o n d|1 1 1 0|a|b|c|d|e| Fn |j| Fd |0|0|0|1|f|g|h|0|i| Fm | CPDO
; |c o n d|1 1 1 0|a|b|c|L|e| Fn | Rd |0|0|0|1|f|g|h|1|i| Fm | CPRT
; |c o n d|1 1 1 0|a|b|c|1|e| Fn |1|1|1|1|0|0|0|1|f|g|h|1|i| Fm | comparisons
; | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
;
; CPDT data transfer instructions
; LDF, STF, LFM (copro 2), SFM (copro 2)
;
; CPDO dyadic arithmetic instructions
; ADF, MUF, SUF, RSF, DVF, RDF,
; POW, RPW, RMF, FML, FDV, FRD, POL
;
; CPDO monadic arithmetic instructions
; MVF, MNF, ABS, RND, SQT, LOG, LGN, EXP,
; SIN, COS, TAN, ASN, ACS, ATN, URD, NRM
;
; CPRT joint arithmetic/data transfer instructions
; FIX (arithmetic followed by load/store)
; FLT (load/store followed by arithmetic)
; CMF, CNF CMFE, CNFE (comparisons)
; WFS, RFS (write/read floating point status register)
; WFC, RFC (write/read floating point control register)
; \xF0 - CPDT
; code 1: copro (1/2)
; code 2: load/store bit
; \xF1 - CPDO
; \xF2 - CPDO monadic
; \xF3 - CPRT
; \xF4 - CPRT comparison
;
; \xFF - fix me
;
[NONE]
void void none
[ABScc]
[ACScc]
[ASNcc]
[ATNcc]
[ADCcc]
reg32,reg32,reg32 \4\x0\xA0 ARM7
reg32,reg32,reg32,reg32 \5\x0\xA0 ARM7
reg32,reg32,reg32,imm \6\x0\xA0 ARM7
reg32,reg32,imm \7\x2\xA0 ARM7
[ADDcc]
reg32,reg32,reg32 \4\x0\x80 ARM7
reg32,reg32,reg32,reg32 \5\x0\x80 ARM7
reg32,reg32,reg32,imm \6\x0\x80 ARM7
reg32,reg32,imm \7\x2\x80 ARM7
[ADFcc]
[ADRcc]
[ANDcc]
reg32,reg32,reg32 \4\x0\x00 ARM7
reg32,reg32,reg32,reg32 \5\x0\x00 ARM7
reg32,reg32,reg32,imm \6\x0\x00 ARM7
reg32,reg32,imm \7\x2\x00 ARM7
[Bcc]
mem32 \1\x0A ARM7
imm24 \1\x0A ARM7
[BICcc]
reg32,reg32,reg32 \4\x1\xC0 ARM7
reg32,reg32,reg32,reg32 \5\x1\xC0 ARM7
reg32,reg32,reg32,imm \6\x1\xC0 ARM7
reg32,reg32,imm \7\x3\xC0 ARM7
[BLcc]
mem32 \1\x0B ARM7
imm24 \1\x0B ARM7
[BLX]
mem32 \xff ARM7
imm24 \xff ARM7
[BKPTcc]
[BXcc]
reg32 \3\x01\x2F\xFF\x10 ARM7
[CDP]
reg8,reg8 \300\1\x10\101 ARM7
[CMFcc]
[CMFEcc]
[CMNcc]
reg32,reg32 \xC\x1\x60 ARM7
reg32,reg32,reg32 \xD\x1\x60 ARM7
reg32,reg32,imm \xE\x1\x60 ARM7
reg32,imm \xF\x3\x60 ARM7
[CMPcc]
reg32,reg32 \xC\x1\x40 ARM7
reg32,reg32,reg32 \xD\x1\x40 ARM7
reg32,reg32,imm \xE\x1\x40 ARM7
reg32,imm \xF\x3\x40 ARM7
[CLZcc]
reg32,reg32 \x27\x01\x01 ARM7
[CNFcc]
[COScc]
[CPS]
[CPSID]
[CPSIE]
[DVFcc]
[EORcc]
reg32,reg32,reg32 \4\x0\x20 ARM7
reg32,reg32,reg32,reg32 \5\x0\x20 ARM7
reg32,reg32,reg32,imm \6\x0\x20 ARM7
reg32,reg32,imm \7\x2\x20 ARM7
[EXPcc]
[FDVcc]
[FLTcc]
[FIXcc]
[FMLcc]
[FRDcc]
[LDC]
reg32,reg32 \321\300\1\x11\101 ARM7
[LDMcc]
memam4,reglist \x26\x81 ARM7
[LDRBTcc]
[LDRBcc]
reg32,memam2 \x17\x07\x10 ARM7
[LDRcc]
reg32,memam2 \x17\x05\x10 ARM7
; reg32,imm32 \x17\x05\x10 ARM7
; reg32,reg32 \x18\x04\x10 ARM7
; reg32,reg32,imm32 \x19\x04\x10 ARM7
; reg32,reg32,reg32 \x20\x06\x10 ARM7
; reg32,reg32,reg32,imm32 \x21\x06\x10 ARM7
[LDRHcc]
reg32,imm32 \x22\x50\xB0 ARM7
reg32,reg32 \x23\x50\xB0 ARM7
reg32,reg32,imm32 \x24\x50\xB0 ARM7
reg32,reg32,reg32 \x25\x10\xB0 ARM7
[LDRSBcc]
reg32,imm32 \x22\x50\xD0 ARM7
reg32,reg32 \x23\x50\xD0 ARM7
reg32,reg32,imm32 \x24\x50\xD0 ARM7
reg32,reg32,reg32 \x25\x10\xD0 ARM7
[LDRSHcc]
reg32,imm32 \x22\x50\xF0 ARM7
reg32,reg32 \x23\x50\xF0 ARM7
reg32,reg32,imm32 \x24\x50\xF0 ARM7
reg32,reg32,reg32 \x25\x10\xF0 ARM7
[LDRTcc]
[LDFcc]
[LFMcc]
reg32,imm8,fpureg \xF0\x02\x01 FPA
[LGNcc]
[LOGcc]
[MCR]
; reg32,mem32 \320\301\1\x13\110 ARM7
[MLAcc]
reg32,reg32,reg32,reg32 \x15\x00\x20\x90 ARM7
[MOVcc]
; reg32,shifterop \x8\x0\0xd ARM7
; reg32,immshifter \x8\x0\0xd ARM7
; reg32,reg32,reg32 \x9\x1\xA0 ARM7
; reg32,reg32,imm \xA\x1\xA0 ARM7
; reg32,imm \xB\x3\xA0 ARM7
[MRC]
; reg32,reg32 \321\301\1\x13\110 ARM7
[MRScc]
reg32,reg32 \x10\x01\x0F ARM7
[MSRcc]
reg32,reg32 \x11\x01\x29\xF0 ARM7
regf,reg32 \x12\x01\x28\xF0 ARM7
regf,imm \x13\x03\x28\xF0 ARM7
[MNFcc]
[MUFcc]
[MULcc]
reg32,reg32,reg32 \x14\x00\x00\x90 ARM7
[MVFcc]
fpureg,fpureg \xF2 FPA
fpureg,immfpu \xF2 FPA
[MVNcc]
; reg32,reg32 \x8\x0\0xf ARM7
; reg32,reg32,reg32 \x9\x1\xE0 ARM7
; reg32,reg32,imm \xA\x1\xE0 ARM7
; reg32,imm \xB\x3\xE0 ARM7
[NOP]
[ORRcc]
reg32,reg32,reg32 \4\x1\x80 ARM7
reg32,reg32,reg32,reg32 \5\x1\x80 ARM7
reg32,reg32,reg32,imm \6\x1\x80 ARM7
reg32,reg32,imm \7\x3\x80 ARM7
[RDFcc]
[RFScc]
[RFCcc]
[RMFcc]
[RPWcc]
[RSBcc]
reg32,reg32,reg32 \4\x0\x60 ARM7
reg32,reg32,reg32,reg32 \5\x0\x60 ARM7
reg32,reg32,reg32,imm \6\x0\x60 ARM7
reg32,reg32,imm \7\x2\x60 ARM7
[RSCcc]
reg32,reg32,reg32 \4\x0\xE0 ARM7
reg32,reg32,reg32,reg32 \5\x0\xE0 ARM7
reg32,reg32,reg32,imm \6\x0\xE0 ARM7
reg32,reg32,imm \7\x2\xE0 ARM7
[RSFcc]
[RNDcc]
[POLcc]
[SBCcc]
reg32,reg32,reg32 \4\x0\xC0 ARM7
reg32,reg32,reg32,reg32 \5\x0\xC0 ARM7
reg32,reg32,reg32,imm \6\x0\xC0 ARM7
reg32,reg32,imm \7\x2\xC0 ARM7
[SFMcc]
reg32,imm8,fpureg \xF0\x02\x00 FPA
[SINcc]
[SMLALcc]
reg32,reg32,reg32,reg32 \x16\x00\xE0\x90 ARM7
[SMULLcc]
reg32,reg32,reg32,reg32 \x16\x00\xC0\x90 ARM7
[SQTcc]
[SUFcc]
[STFcc]
[STMcc]
memam4,reglist \x26\x80 ARM7
[STRcc]
reg32,memam2 \x17\x04\x00 ARM7
; reg32,imm32 \x17\x05\x00 ARM7
; reg32,reg32 \x18\x04\x00 ARM7
; reg32,reg32,imm32 \x19\x04\x00 ARM7
; reg32,reg32,reg32 \x20\x06\x00 ARM7
; reg32,reg32,reg32,imm32 \x21\x06\x00 ARM7
[STRBcc]
reg32,memam2 \x17\x06\x00 ARM7
[STRBTcc]
; A dummy since it is parsed as STR{cond}H
[STRHcc]
reg32,imm32 \x22\x40\xB0 ARM7
reg32,reg32 \x23\x40\xB0 ARM7
reg32,reg32,imm32 \x24\x40\xB0 ARM7
reg32,reg32,reg32 \x25\x00\xB0 ARM7
[STRTcc]
[SUBcc]
reg32,reg32,shifterop \4\x0\x40 ARM7
reg32,reg32,immshifter \4\x0\x40 ARM7
reg32,reg32,reg32 \4\x0\x40 ARM7
; reg32,reg32,reg32,reg32 \5\x0\x40 ARM7
; reg32,reg32,reg32,imm \6\x0\x40 ARM7
; reg32,reg32,imm \7\x2\x40 ARM7
[SWIcc]
imm \2\x0F ARM7
[SWPcc]
reg32,reg32,reg32 \x27\x01\x90 ARM7
[SWPBcc]
reg32,reg32,reg32 \x27\x01\x90 ARM7
[TANcc]
[TEQcc]
reg32,reg32 \xC\x1\x20 ARM7
reg32,reg32,reg32 \xD\x1\x20 ARM7
reg32,reg32,imm \xE\x1\x20 ARM7
reg32,imm \xF\x3\x20 ARM7
[TSTcc]
reg32,reg32 \xC\x1\x00 ARM7
reg32,reg32,reg32 \xD\x1\x00 ARM7
reg32,reg32,imm \xE\x1\x00 ARM7
reg32,imm \xF\x3\x00 ARM7
[UMLALcc]
reg32,reg32,reg32,reg32 \x16\x00\xA0\x90 ARM7
[UMULLcc]
reg32,reg32,reg32,reg32 \x16\x00\x80\x90 ARM7
[WFScc]
; EDSP instructions
[LDRDcc]
[MCRRcc]
[MRRCcc]
[PLD]
[QADDcc]
[QDADDcc]
[QDSUBcc]
[QSUBcc]
[SMLABBcc]
[SMLABTcc]
[SMLATBcc]
[SMLATTcc]
[SMLALBBcc]
[SMLALBTcc]
[SMLALTBcc]
[SMLALTTcc]
[SMLAWBcc]
[SMLAWTcc]
[SMULBBcc]
[SMULBTcc]
[SMULTBcc]
[SMULTTcc]
[SMULWBcc]
[SMULWTcc]
[STRDcc]
;
; vfp instructions
;
[FABSDcc]
[FABSScc]
[FADDDcc]
[FADDScc]
[FCMPDcc]
[FCMPEDcc]
[FCMPEScc]
[FCMPEZDcc]
[FCMPEZScc]
[FCMPScc]
[FCMPZDcc]
[FCMPZScc]
[FCPYDcc]
[FCPYScc]
[FCVTDScc]
[FCVTSDcc]
[FDIVDcc]
[FDIVScc]
[FLDDcc]
[FLDMcc]
[FLDScc]
[FMACDcc]
[FMACScc]
[FMDHRcc]
[FMDLRcc]
[FMRDHcc]
[FMRDLcc]
[FMRScc]
[FMRXcc]
[FMSCDcc]
[FMSCScc]
[FMSRcc]
[FMSTATcc]
[FMULDcc]
[FMULScc]
[FMXRcc]
[FNEGDcc]
[FNEGScc]
[FNMACDcc]
[FNMACScc]
[FNMSCDcc]
[FNMSCScc]
[FNMULDcc]
[FNMULScc]
[FSITODcc]
[FSITOScc]
[FSQRTDcc]
[FSQRTScc]
[FSTDcc]
[FSTMcc]
[FSTScc]
[FSUBDcc]
[FSUBScc]
[FTOSIDcc]
[FTOSIScc]
[FTOUIDcc]
[FTOUIScc]
[FUITODcc]
[FUITOScc]
[FMDRRcc]
[FMRRDcc]
; ARMv6
[BFCcc]
[BFIcc]
[CLREX]
[LDREXcc]
[LDREXBcc]
[LDREXDcc]
[LDREXHcc]
[MLScc]
[PKHcc]
[PLI]
[QADD16cc]
[QADD8cc]
[QASXcc]
[QSAXcc]
[QSUB16cc]
[QSUB8cc]
[RBITcc]
[REVcc]
[REV16cc]
[REVSHcc]
[SADD16cc]
[SADD8cc]
[SASXcc]
[SBFXcc]
[SELcc]
[SETEND]
[SEVcc]
[ASRcc]
[LSRcc]
[LSLcc]
[RORcc]
[SHADD16cc]
[SHADD8cc]
[SHASXcc]
[SHSAXcc]
[SHSUB16cc]
[SHSUB8cc]
[SMLADcc]
[SMLALDcc]
[SMLSDcc]
[SMLSLDcc]
[SMMLAcc]
[SMMLScc]
[SMMULcc]
[SMUADcc]
[SMUSDcc]
[SRScc]
[SSATcc]
[SSAT16cc]
[SSAXcc]
[SSUB16cc]
[SSUB8cc]
[STREXcc]
[STREXBcc]
[STREXDcc]
[STREXHcc]
[SXTABcc]
[SXTAB16cc]
[SXTAHcc]
[SXTBcc]
[SXTB16cc]
[UXTBcc]
[UXTHcc]
[SXTHcc]
[UADD16cc]
[UADD8cc]
[UASXcc]
[UBFXcc]
[UHADD16cc]
[UHADD8cc]
[UHASXcc]
[UHSAXcc]
[UHSUB16cc]
[UHSUB8cc]
[UMAALcc]
[UQADD16cc]
[UQADD8]
[UQASXcc]
[UQSAXcc]
[UQSUB16cc]
[UQSUB8cc]
[UQSAD8cc]
[UQSADA8cc]
[USATcc]
[USAT16cc]
[USAXcc]
[USUB16cc]
[USUB8cc]
[UXTABcc]
[UXTAB16cc]
[UXTAHcc]
[UXTB16cc]
[WFEcc]
[WFIcc]
[YIELDcc]
; Thumb-2
[POP]
[PUSH]
[SDIVcc]
[UDIVcc]
[MOVTcc]
[IT]
[ITE]
[ITT]
[ITEE]
[ITTE]
[ITET]
[ITTT]
[ITEEE]
[ITTEE]
[ITETE]
[ITTTE]
[ITEET]
[ITTET]
[ITETT]
[ITTTT]
[TBB]
[TBH]
[MOVW]
[CBZ]
[CBNZ]
; FPv4-s16 - ARMv7M floating point
[VABS]
[VADD]
[VCMP]
[VCMPE]
[VCVT]
[VDIV]
[VLDM]
[VLDR]
[VMOV]
[VMRS]
[VMSR]
[VMUL]
[VMLA]
[VMLS]
[VNMLA]
[VNMLS]
[VFMA]
[VFMS]
[VFNMA]
[VFNMS]
[VNEG]
[VNMUL]
[VPOP]
[VPUSH]
[VSQRT]
[VSTM]
[VSTR]
[VSUB]
; Thumb armv6-m (gcc)
[NEG]
[SVC]