Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * arch/arm/kernel/kprobes-test-arm.c
0004  *
0005  * Copyright (C) 2011 Jon Medhurst <tixy@yxit.co.uk>.
0006  */
0007 
0008 #include <linux/kernel.h>
0009 #include <linux/module.h>
0010 #include <asm/system_info.h>
0011 #include <asm/opcodes.h>
0012 #include <asm/probes.h>
0013 
0014 #include "test-core.h"
0015 
0016 
0017 #define TEST_ISA "32"
0018 
0019 #define TEST_ARM_TO_THUMB_INTERWORK_R(code1, reg, val, code2)   \
0020     TESTCASE_START(code1 #reg code2)            \
0021     TEST_ARG_REG(reg, val)                  \
0022     TEST_ARG_REG(14, 99f)                   \
0023     TEST_ARG_END("")                    \
0024     "50:    nop         \n\t"           \
0025     "1: "code1 #reg code2"  \n\t"           \
0026     "   bx  lr      \n\t"           \
0027     ".thumb             \n\t"           \
0028     "3: adr lr, 2f      \n\t"           \
0029     "   bx  lr      \n\t"           \
0030     ".arm               \n\t"           \
0031     "2: nop         \n\t"           \
0032     TESTCASE_END
0033 
0034 #define TEST_ARM_TO_THUMB_INTERWORK_P(code1, reg, val, code2)   \
0035     TESTCASE_START(code1 #reg code2)            \
0036     TEST_ARG_PTR(reg, val)                  \
0037     TEST_ARG_REG(14, 99f)                   \
0038     TEST_ARG_MEM(15, 3f+1)                  \
0039     TEST_ARG_END("")                    \
0040     "50:    nop         \n\t"           \
0041     "1: "code1 #reg code2"  \n\t"           \
0042     "   bx  lr      \n\t"           \
0043     ".thumb             \n\t"           \
0044     "3: adr lr, 2f      \n\t"           \
0045     "   bx  lr      \n\t"           \
0046     ".arm               \n\t"           \
0047     "2: nop         \n\t"           \
0048     TESTCASE_END
0049 
0050 
0051 void kprobe_arm_test_cases(void)
0052 {
0053     kprobe_test_flags = 0;
0054 
0055     TEST_GROUP("Data-processing (register), (register-shifted register), (immediate)")
0056 
0057 #define _DATA_PROCESSING_DNM(op,s,val)                      \
0058     TEST_RR(  op s "eq  r0,  r",1, VAL1,", r",2, val, "")       \
0059     TEST_RR(  op s "ne  r1,  r",1, VAL1,", r",2, val, ", lsl #3")   \
0060     TEST_RR(  op s "cs  r2,  r",3, VAL1,", r",2, val, ", lsr #4")   \
0061     TEST_RR(  op s "cc  r3,  r",3, VAL1,", r",2, val, ", asr #5")   \
0062     TEST_RR(  op s "mi  r4,  r",5, VAL1,", r",2, N(val),", asr #6") \
0063     TEST_RR(  op s "pl  r5,  r",5, VAL1,", r",2, val, ", ror #7")   \
0064     TEST_RR(  op s "vs  r6,  r",7, VAL1,", r",2, val, ", rrx")      \
0065     TEST_R(   op s "vc  r6,  r",7, VAL1,", pc, lsl #3")         \
0066     TEST_R(   op s "vc  r6,  r",7, VAL1,", sp, lsr #4")         \
0067     TEST_R(   op s "vc  r6,  pc, r",7, VAL1,", asr #5")         \
0068     TEST_R(   op s "vc  r6,  sp, r",7, VAL1,", ror #6")         \
0069     TEST_RRR( op s "hi  r8,  r",9, VAL1,", r",14,val, ", lsl r",0, 3,"")\
0070     TEST_RRR( op s "ls  r9,  r",9, VAL1,", r",14,val, ", lsr r",7, 4,"")\
0071     TEST_RRR( op s "ge  r10, r",11,VAL1,", r",14,val, ", asr r",7, 5,"")\
0072     TEST_RRR( op s "lt  r11, r",11,VAL1,", r",14,N(val),", asr r",7, 6,"")\
0073     TEST_RR(  op s "gt  r12, r13"       ", r",14,val, ", ror r",14,7,"")\
0074     TEST_RR(  op s "le  r14, r",0, val, ", r13"       ", lsl r",14,8,"")\
0075     TEST_R(   op s "eq  r0,  r",11,VAL1,", #0xf5")          \
0076     TEST_R(   op s "ne  r11, r",0, VAL1,", #0xf5000000")        \
0077     TEST_R(   op s "    r7,  r",8, VAL2,", #0x000af000")        \
0078     TEST(     op s "    r4,  pc"        ", #0x00005a00")
0079 
0080 #define DATA_PROCESSING_DNM(op,val)     \
0081     _DATA_PROCESSING_DNM(op,"",val)     \
0082     _DATA_PROCESSING_DNM(op,"s",val)
0083 
0084 #define DATA_PROCESSING_NM(op,val)                      \
0085     TEST_RR(  op "ne    r",1, VAL1,", r",2, val, "")            \
0086     TEST_RR(  op "eq    r",1, VAL1,", r",2, val, ", lsl #3")        \
0087     TEST_RR(  op "cc    r",3, VAL1,", r",2, val, ", lsr #4")        \
0088     TEST_RR(  op "cs    r",3, VAL1,", r",2, val, ", asr #5")        \
0089     TEST_RR(  op "pl    r",5, VAL1,", r",2, N(val),", asr #6")      \
0090     TEST_RR(  op "mi    r",5, VAL1,", r",2, val, ", ror #7")        \
0091     TEST_RR(  op "vc    r",7, VAL1,", r",2, val, ", rrx")       \
0092     TEST_R (  op "vs    r",7, VAL1,", pc, lsl #3")          \
0093     TEST_R (  op "vs    r",7, VAL1,", sp, lsr #4")          \
0094     TEST_R(   op "vs    pc, r",7, VAL1,", asr #5")          \
0095     TEST_R(   op "vs    sp, r",7, VAL1,", ror #6")          \
0096     TEST_RRR( op "ls    r",9, VAL1,", r",14,val, ", lsl r",0, 3,"") \
0097     TEST_RRR( op "hi    r",9, VAL1,", r",14,val, ", lsr r",7, 4,"") \
0098     TEST_RRR( op "lt    r",11,VAL1,", r",14,val, ", asr r",7, 5,"") \
0099     TEST_RRR( op "ge    r",11,VAL1,", r",14,N(val),", asr r",7, 6,"")   \
0100     TEST_RR(  op "le    r13"       ", r",14,val, ", ror r",14,7,"") \
0101     TEST_RR(  op "gt    r",0, val, ", r13"       ", lsl r",14,8,"") \
0102     TEST_R(   op "eq    r",11,VAL1,", #0xf5")               \
0103     TEST_R(   op "ne    r",0, VAL1,", #0xf5000000")         \
0104     TEST_R(   op "  r",8, VAL2,", #0x000af000")
0105 
0106 #define _DATA_PROCESSING_DM(op,s,val)                   \
0107     TEST_R(   op s "eq  r0,  r",1, val, "")         \
0108     TEST_R(   op s "ne  r1,  r",1, val, ", lsl #3")     \
0109     TEST_R(   op s "cs  r2,  r",3, val, ", lsr #4")     \
0110     TEST_R(   op s "cc  r3,  r",3, val, ", asr #5")     \
0111     TEST_R(   op s "mi  r4,  r",5, N(val),", asr #6")       \
0112     TEST_R(   op s "pl  r5,  r",5, val, ", ror #7")     \
0113     TEST_R(   op s "vs  r6,  r",10,val, ", rrx")        \
0114     TEST(     op s "vs  r7,  pc, lsl #3")           \
0115     TEST(     op s "vs  r7,  sp, lsr #4")           \
0116     TEST_RR(  op s "vc  r8,  r",7, val, ", lsl r",0, 3,"")  \
0117     TEST_RR(  op s "hi  r9,  r",9, val, ", lsr r",7, 4,"")  \
0118     TEST_RR(  op s "ls  r10, r",9, val, ", asr r",7, 5,"")  \
0119     TEST_RR(  op s "ge  r11, r",11,N(val),", asr r",7, 6,"")    \
0120     TEST_RR(  op s "lt  r12, r",11,val, ", ror r",14,7,"")  \
0121     TEST_R(   op s "gt  r14, r13"       ", lsl r",14,8,"")  \
0122     TEST(     op s "eq  r0,  #0xf5")                \
0123     TEST(     op s "ne  r11, #0xf5000000")          \
0124     TEST(     op s "    r7,  #0x000af000")          \
0125     TEST(     op s "    r4,  #0x00005a00")
0126 
0127 #define DATA_PROCESSING_DM(op,val)      \
0128     _DATA_PROCESSING_DM(op,"",val)      \
0129     _DATA_PROCESSING_DM(op,"s",val)
0130 
0131     DATA_PROCESSING_DNM("and",0xf00f00ff)
0132     DATA_PROCESSING_DNM("eor",0xf00f00ff)
0133     DATA_PROCESSING_DNM("sub",VAL2)
0134     DATA_PROCESSING_DNM("rsb",VAL2)
0135     DATA_PROCESSING_DNM("add",VAL2)
0136     DATA_PROCESSING_DNM("adc",VAL2)
0137     DATA_PROCESSING_DNM("sbc",VAL2)
0138     DATA_PROCESSING_DNM("rsc",VAL2)
0139     DATA_PROCESSING_NM("tst",0xf00f00ff)
0140     DATA_PROCESSING_NM("teq",0xf00f00ff)
0141     DATA_PROCESSING_NM("cmp",VAL2)
0142     DATA_PROCESSING_NM("cmn",VAL2)
0143     DATA_PROCESSING_DNM("orr",0xf00f00ff)
0144     DATA_PROCESSING_DM("mov",VAL2)
0145     DATA_PROCESSING_DNM("bic",0xf00f00ff)
0146     DATA_PROCESSING_DM("mvn",VAL2)
0147 
0148     TEST("mov   ip, sp") /* This has special case emulation code */
0149 
0150     TEST_SUPPORTED("mov pc, #0x1000");
0151     TEST_SUPPORTED("mov sp, #0x1000");
0152     TEST_SUPPORTED("cmp pc, #0x1000");
0153     TEST_SUPPORTED("cmp sp, #0x1000");
0154 
0155     /* Data-processing with PC and a shift count in a register */
0156     TEST_UNSUPPORTED(__inst_arm(0xe15c0f1e) "   @ cmp   r12, r14, asl pc")
0157     TEST_UNSUPPORTED(__inst_arm(0xe1a0cf1e) "   @ mov   r12, r14, asl pc")
0158     TEST_UNSUPPORTED(__inst_arm(0xe08caf1e) "   @ add   r10, r12, r14, asl pc")
0159     TEST_UNSUPPORTED(__inst_arm(0xe151021f) "   @ cmp   r1, pc, lsl r2")
0160     TEST_UNSUPPORTED(__inst_arm(0xe17f0211) "   @ cmn   pc, r1, lsl r2")
0161     TEST_UNSUPPORTED(__inst_arm(0xe1a0121f) "   @ mov   r1, pc, lsl r2")
0162     TEST_UNSUPPORTED(__inst_arm(0xe1a0f211) "   @ mov   pc, r1, lsl r2")
0163     TEST_UNSUPPORTED(__inst_arm(0xe042131f) "   @ sub   r1, r2, pc, lsl r3")
0164     TEST_UNSUPPORTED(__inst_arm(0xe1cf1312) "   @ bic   r1, pc, r2, lsl r3")
0165     TEST_UNSUPPORTED(__inst_arm(0xe081f312) "   @ add   pc, r1, r2, lsl r3")
0166 
0167     /* Data-processing with PC as a target and status registers updated */
0168     TEST_UNSUPPORTED("movs  pc, r1")
0169     TEST_UNSUPPORTED(__inst_arm(0xe1b0f211) "   @movs   pc, r1, lsl r2")
0170     TEST_UNSUPPORTED("movs  pc, #0x10000")
0171     TEST_UNSUPPORTED("adds  pc, lr, r1")
0172     TEST_UNSUPPORTED(__inst_arm(0xe09ef211) "   @adds   pc, lr, r1, lsl r2")
0173     TEST_UNSUPPORTED("adds  pc, lr, #4")
0174 
0175     /* Data-processing with SP as target */
0176     TEST("add   sp, sp, #16")
0177     TEST("sub   sp, sp, #8")
0178     TEST("bic   sp, sp, #0x20")
0179     TEST("orr   sp, sp, #0x20")
0180     TEST_PR( "add   sp, r",10,0,", r",11,4,"")
0181     TEST_PRR("add   sp, r",10,0,", r",11,4,", asl r",12,1,"")
0182     TEST_P(  "mov   sp, r",10,0,"")
0183     TEST_PR( "mov   sp, r",10,0,", asl r",12,0,"")
0184 
0185     /* Data-processing with PC as target */
0186     TEST_BF(   "add pc, pc, #2f-1b-8")
0187     TEST_BF_R ("add pc, pc, r",14,2f-1f-8,"")
0188     TEST_BF_R ("add pc, r",14,2f-1f-8,", pc")
0189     TEST_BF_R ("mov pc, r",0,2f,"")
0190     TEST_BF_R ("add pc, pc, r",14,(2f-1f-8)*2,", asr #1")
0191     TEST_BB(   "sub pc, pc, #1b-2b+8")
0192 #if __LINUX_ARM_ARCH__ == 6 && !defined(CONFIG_CPU_V7)
0193     TEST_BB(   "sub pc, pc, #1b-2b+8-2") /* UNPREDICTABLE before and after ARMv6 */
0194 #endif
0195     TEST_BB_R( "sub pc, pc, r",14, 1f-2f+8,"")
0196     TEST_BB_R( "rsb pc, r",14,1f-2f+8,", pc")
0197     TEST_R(    "add pc, pc, r",10,-2,", asl #1")
0198 #ifdef CONFIG_THUMB2_KERNEL
0199     TEST_ARM_TO_THUMB_INTERWORK_R("add  pc, pc, r",0,3f-1f-8+1,"")
0200     TEST_ARM_TO_THUMB_INTERWORK_R("sub  pc, r",0,3f+8+1,", #8")
0201 #endif
0202     TEST_GROUP("Miscellaneous instructions")
0203 
0204     TEST_RMASKED("mrs   r",0,~PSR_IGNORE_BITS,", cpsr")
0205     TEST_RMASKED("mrspl r",7,~PSR_IGNORE_BITS,", cpsr")
0206     TEST_RMASKED("mrs   r",14,~PSR_IGNORE_BITS,", cpsr")
0207     TEST_UNSUPPORTED(__inst_arm(0xe10ff000) "   @ mrs r15, cpsr")
0208     TEST_UNSUPPORTED("mrs   r0, spsr")
0209     TEST_UNSUPPORTED("mrs   lr, spsr")
0210 
0211     TEST_UNSUPPORTED("msr   cpsr, r0")
0212     TEST_UNSUPPORTED("msr   cpsr_f, lr")
0213     TEST_UNSUPPORTED("msr   spsr, r0")
0214 
0215 #if __LINUX_ARM_ARCH__ >= 5 || \
0216     (__LINUX_ARM_ARCH__ == 4 && !defined(CONFIG_CPU_32v4))
0217     TEST_BF_R("bx   r",0,2f,"")
0218     TEST_BB_R("bx   r",7,2f,"")
0219     TEST_BF_R("bxeq r",14,2f,"")
0220 #endif
0221 
0222 #if __LINUX_ARM_ARCH__ >= 5
0223     TEST_R("clz r0, r",0, 0x0,"")
0224     TEST_R("clzeq   r7, r",14,0x1,"")
0225     TEST_R("clz lr, r",7, 0xffffffff,"")
0226     TEST(  "clz r4, sp")
0227     TEST_UNSUPPORTED(__inst_arm(0x016fff10) "   @ clz pc, r0")
0228     TEST_UNSUPPORTED(__inst_arm(0x016f0f1f) "   @ clz r0, pc")
0229 
0230 #if __LINUX_ARM_ARCH__ >= 6
0231     TEST_UNSUPPORTED("bxj   r0")
0232 #endif
0233 
0234     TEST_BF_R("blx  r",0,2f,"")
0235     TEST_BB_R("blx  r",7,2f,"")
0236     TEST_BF_R("blxeq    r",14,2f,"")
0237     TEST_UNSUPPORTED(__inst_arm(0x0120003f) "   @ blx pc")
0238 
0239     TEST_RR(   "qadd    r0, r",1, VAL1,", r",2, VAL2,"")
0240     TEST_RR(   "qaddvs  lr, r",9, VAL2,", r",8, VAL1,"")
0241     TEST_R(    "qadd    lr, r",9, VAL2,", r13")
0242     TEST_RR(   "qsub    r0, r",1, VAL1,", r",2, VAL2,"")
0243     TEST_RR(   "qsubvs  lr, r",9, VAL2,", r",8, VAL1,"")
0244     TEST_R(    "qsub    lr, r",9, VAL2,", r13")
0245     TEST_RR(   "qdadd   r0, r",1, VAL1,", r",2, VAL2,"")
0246     TEST_RR(   "qdaddvs lr, r",9, VAL2,", r",8, VAL1,"")
0247     TEST_R(    "qdadd   lr, r",9, VAL2,", r13")
0248     TEST_RR(   "qdsub   r0, r",1, VAL1,", r",2, VAL2,"")
0249     TEST_RR(   "qdsubvs lr, r",9, VAL2,", r",8, VAL1,"")
0250     TEST_R(    "qdsub   lr, r",9, VAL2,", r13")
0251     TEST_UNSUPPORTED(__inst_arm(0xe101f050) "   @ qadd pc, r0, r1")
0252     TEST_UNSUPPORTED(__inst_arm(0xe121f050) "   @ qsub pc, r0, r1")
0253     TEST_UNSUPPORTED(__inst_arm(0xe141f050) "   @ qdadd pc, r0, r1")
0254     TEST_UNSUPPORTED(__inst_arm(0xe161f050) "   @ qdsub pc, r0, r1")
0255     TEST_UNSUPPORTED(__inst_arm(0xe16f2050) "   @ qdsub r2, r0, pc")
0256     TEST_UNSUPPORTED(__inst_arm(0xe161205f) "   @ qdsub r2, pc, r1")
0257 
0258     TEST_UNSUPPORTED("bkpt  0xffff")
0259     TEST_UNSUPPORTED("bkpt  0x0000")
0260 
0261     TEST_UNSUPPORTED(__inst_arm(0xe1600070) " @ smc #0")
0262 
0263     TEST_GROUP("Halfword multiply and multiply-accumulate")
0264 
0265     TEST_RRR(    "smlabb    r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
0266     TEST_RRR(    "smlabbge  r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
0267     TEST_RR(     "smlabb    lr, r",1, VAL2,", r",2, VAL3,", r13")
0268     TEST_UNSUPPORTED(__inst_arm(0xe10f3281) " @ smlabb pc, r1, r2, r3")
0269     TEST_RRR(    "smlatb    r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
0270     TEST_RRR(    "smlatbge  r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
0271     TEST_RR(     "smlatb    lr, r",1, VAL2,", r",2, VAL3,", r13")
0272     TEST_UNSUPPORTED(__inst_arm(0xe10f32a1) " @ smlatb pc, r1, r2, r3")
0273     TEST_RRR(    "smlabt    r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
0274     TEST_RRR(    "smlabtge  r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
0275     TEST_RR(     "smlabt    lr, r",1, VAL2,", r",2, VAL3,", r13")
0276     TEST_UNSUPPORTED(__inst_arm(0xe10f32c1) " @ smlabt pc, r1, r2, r3")
0277     TEST_RRR(    "smlatt    r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
0278     TEST_RRR(    "smlattge  r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
0279     TEST_RR(     "smlatt    lr, r",1, VAL2,", r",2, VAL3,", r13")
0280     TEST_UNSUPPORTED(__inst_arm(0xe10f32e1) " @ smlatt pc, r1, r2, r3")
0281 
0282     TEST_RRR(    "smlawb    r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
0283     TEST_RRR(    "smlawbge  r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
0284     TEST_RR(     "smlawb    lr, r",1, VAL2,", r",2, VAL3,", r13")
0285     TEST_UNSUPPORTED(__inst_arm(0xe12f3281) " @ smlawb pc, r1, r2, r3")
0286     TEST_RRR(    "smlawt    r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
0287     TEST_RRR(    "smlawtge  r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
0288     TEST_RR(     "smlawt    lr, r",1, VAL2,", r",2, VAL3,", r13")
0289     TEST_UNSUPPORTED(__inst_arm(0xe12f32c1) " @ smlawt pc, r1, r2, r3")
0290     TEST_UNSUPPORTED(__inst_arm(0xe12032cf) " @ smlawt r0, pc, r2, r3")
0291     TEST_UNSUPPORTED(__inst_arm(0xe1203fc1) " @ smlawt r0, r1, pc, r3")
0292     TEST_UNSUPPORTED(__inst_arm(0xe120f2c1) " @ smlawt r0, r1, r2, pc")
0293 
0294     TEST_RR(    "smulwb r0, r",1, VAL1,", r",2, VAL2,"")
0295     TEST_RR(    "smulwbge   r7, r",8, VAL3,", r",9, VAL1,"")
0296     TEST_R(     "smulwb lr, r",1, VAL2,", r13")
0297     TEST_UNSUPPORTED(__inst_arm(0xe12f02a1) " @ smulwb pc, r1, r2")
0298     TEST_RR(    "smulwt r0, r",1, VAL1,", r",2, VAL2,"")
0299     TEST_RR(    "smulwtge   r7, r",8, VAL3,", r",9, VAL1,"")
0300     TEST_R(     "smulwt lr, r",1, VAL2,", r13")
0301     TEST_UNSUPPORTED(__inst_arm(0xe12f02e1) " @ smulwt pc, r1, r2")
0302 
0303     TEST_RRRR(  "smlalbb    r",0, VAL1,", r",1, VAL2,", r",2, VAL3,", r",3, VAL4)
0304     TEST_RRRR(  "smlalbble  r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
0305     TEST_RRR(   "smlalbb    r",14,VAL3,", r",7, VAL4,", r",5, VAL1,", r13")
0306     TEST_UNSUPPORTED(__inst_arm(0xe14f1382) " @ smlalbb pc, r1, r2, r3")
0307     TEST_UNSUPPORTED(__inst_arm(0xe141f382) " @ smlalbb r1, pc, r2, r3")
0308     TEST_RRRR(  "smlaltb    r",0, VAL1,", r",1, VAL2,", r",2, VAL3,", r",3, VAL4)
0309     TEST_RRRR(  "smlaltble  r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
0310     TEST_RRR(   "smlaltb    r",14,VAL3,", r",7, VAL4,", r",5, VAL1,", r13")
0311     TEST_UNSUPPORTED(__inst_arm(0xe14f13a2) " @ smlaltb pc, r1, r2, r3")
0312     TEST_UNSUPPORTED(__inst_arm(0xe141f3a2) " @ smlaltb r1, pc, r2, r3")
0313     TEST_RRRR(  "smlalbt    r",0, VAL1,", r",1, VAL2,", r",2, VAL3,", r",3, VAL4)
0314     TEST_RRRR(  "smlalbtle  r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
0315     TEST_RRR(   "smlalbt    r",14,VAL3,", r",7, VAL4,", r",5, VAL1,", r13")
0316     TEST_UNSUPPORTED(__inst_arm(0xe14f13c2) " @ smlalbt pc, r1, r2, r3")
0317     TEST_UNSUPPORTED(__inst_arm(0xe141f3c2) " @ smlalbt r1, pc, r2, r3")
0318     TEST_RRRR(  "smlaltt    r",0, VAL1,", r",1, VAL2,", r",2, VAL3,", r",3, VAL4)
0319     TEST_RRRR(  "smlalttle  r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
0320     TEST_RRR(   "smlaltt    r",14,VAL3,", r",7, VAL4,", r",5, VAL1,", r13")
0321     TEST_UNSUPPORTED(__inst_arm(0xe14f13e2) " @ smlalbb pc, r1, r2, r3")
0322     TEST_UNSUPPORTED(__inst_arm(0xe140f3e2) " @ smlalbb r0, pc, r2, r3")
0323     TEST_UNSUPPORTED(__inst_arm(0xe14013ef) " @ smlalbb r0, r1, pc, r3")
0324     TEST_UNSUPPORTED(__inst_arm(0xe1401fe2) " @ smlalbb r0, r1, r2, pc")
0325 
0326     TEST_RR(    "smulbb r0, r",1, VAL1,", r",2, VAL2,"")
0327     TEST_RR(    "smulbbge   r7, r",8, VAL3,", r",9, VAL1,"")
0328     TEST_R(     "smulbb lr, r",1, VAL2,", r13")
0329     TEST_UNSUPPORTED(__inst_arm(0xe16f0281) " @ smulbb pc, r1, r2")
0330     TEST_RR(    "smultb r0, r",1, VAL1,", r",2, VAL2,"")
0331     TEST_RR(    "smultbge   r7, r",8, VAL3,", r",9, VAL1,"")
0332     TEST_R(     "smultb lr, r",1, VAL2,", r13")
0333     TEST_UNSUPPORTED(__inst_arm(0xe16f02a1) " @ smultb pc, r1, r2")
0334     TEST_RR(    "smulbt r0, r",1, VAL1,", r",2, VAL2,"")
0335     TEST_RR(    "smulbtge   r7, r",8, VAL3,", r",9, VAL1,"")
0336     TEST_R(     "smulbt lr, r",1, VAL2,", r13")
0337     TEST_UNSUPPORTED(__inst_arm(0xe16f02c1) " @ smultb pc, r1, r2")
0338     TEST_RR(    "smultt r0, r",1, VAL1,", r",2, VAL2,"")
0339     TEST_RR(    "smulttge   r7, r",8, VAL3,", r",9, VAL1,"")
0340     TEST_R(     "smultt lr, r",1, VAL2,", r13")
0341     TEST_UNSUPPORTED(__inst_arm(0xe16f02e1) " @ smultt pc, r1, r2")
0342     TEST_UNSUPPORTED(__inst_arm(0xe16002ef) " @ smultt r0, pc, r2")
0343     TEST_UNSUPPORTED(__inst_arm(0xe1600fe1) " @ smultt r0, r1, pc")
0344 #endif
0345 
0346     TEST_GROUP("Multiply and multiply-accumulate")
0347 
0348     TEST_RR(    "mul    r0, r",1, VAL1,", r",2, VAL2,"")
0349     TEST_RR(    "mulls  r7, r",8, VAL2,", r",9, VAL2,"")
0350     TEST_R(     "mul    lr, r",4, VAL3,", r13")
0351     TEST_UNSUPPORTED(__inst_arm(0xe00f0291) " @ mul pc, r1, r2")
0352     TEST_UNSUPPORTED(__inst_arm(0xe000029f) " @ mul r0, pc, r2")
0353     TEST_UNSUPPORTED(__inst_arm(0xe0000f91) " @ mul r0, r1, pc")
0354     TEST_RR(    "muls   r0, r",1, VAL1,", r",2, VAL2,"")
0355     TEST_RR(    "mulsls r7, r",8, VAL2,", r",9, VAL2,"")
0356     TEST_R(     "muls   lr, r",4, VAL3,", r13")
0357     TEST_UNSUPPORTED(__inst_arm(0xe01f0291) " @ muls pc, r1, r2")
0358 
0359     TEST_RRR(    "mla   r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
0360     TEST_RRR(    "mlahi r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
0361     TEST_RR(     "mla   lr, r",1, VAL2,", r",2, VAL3,", r13")
0362     TEST_UNSUPPORTED(__inst_arm(0xe02f3291) " @ mla pc, r1, r2, r3")
0363     TEST_RRR(    "mlas  r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
0364     TEST_RRR(    "mlashi    r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
0365     TEST_RR(     "mlas  lr, r",1, VAL2,", r",2, VAL3,", r13")
0366     TEST_UNSUPPORTED(__inst_arm(0xe03f3291) " @ mlas pc, r1, r2, r3")
0367 
0368 #if __LINUX_ARM_ARCH__ >= 6
0369     TEST_RR(  "umaal    r0, r1, r",2, VAL1,", r",3, VAL2,"")
0370     TEST_RR(  "umaalls  r7, r8, r",9, VAL2,", r",10, VAL1,"")
0371     TEST_R(   "umaal    lr, r12, r",11,VAL3,", r13")
0372     TEST_UNSUPPORTED(__inst_arm(0xe041f392) " @ umaal pc, r1, r2, r3")
0373     TEST_UNSUPPORTED(__inst_arm(0xe04f0392) " @ umaal r0, pc, r2, r3")
0374     TEST_UNSUPPORTED(__inst_arm(0xe0500090) " @ undef")
0375     TEST_UNSUPPORTED(__inst_arm(0xe05fff9f) " @ undef")
0376 #endif
0377 
0378 #if __LINUX_ARM_ARCH__ >= 7
0379     TEST_RRR(  "mls     r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
0380     TEST_RRR(  "mlshi   r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
0381     TEST_RR(   "mls     lr, r",1, VAL2,", r",2, VAL3,", r13")
0382     TEST_UNSUPPORTED(__inst_arm(0xe06f3291) " @ mls pc, r1, r2, r3")
0383     TEST_UNSUPPORTED(__inst_arm(0xe060329f) " @ mls r0, pc, r2, r3")
0384     TEST_UNSUPPORTED(__inst_arm(0xe0603f91) " @ mls r0, r1, pc, r3")
0385     TEST_UNSUPPORTED(__inst_arm(0xe060f291) " @ mls r0, r1, r2, pc")
0386 #endif
0387 
0388     TEST_UNSUPPORTED(__inst_arm(0xe0700090) " @ undef")
0389     TEST_UNSUPPORTED(__inst_arm(0xe07fff9f) " @ undef")
0390 
0391     TEST_RR(  "umull    r0, r1, r",2, VAL1,", r",3, VAL2,"")
0392     TEST_RR(  "umullls  r7, r8, r",9, VAL2,", r",10, VAL1,"")
0393     TEST_R(   "umull    lr, r12, r",11,VAL3,", r13")
0394     TEST_UNSUPPORTED(__inst_arm(0xe081f392) " @ umull pc, r1, r2, r3")
0395     TEST_UNSUPPORTED(__inst_arm(0xe08f1392) " @ umull r1, pc, r2, r3")
0396     TEST_RR(  "umulls   r0, r1, r",2, VAL1,", r",3, VAL2,"")
0397     TEST_RR(  "umullsls r7, r8, r",9, VAL2,", r",10, VAL1,"")
0398     TEST_R(   "umulls   lr, r12, r",11,VAL3,", r13")
0399     TEST_UNSUPPORTED(__inst_arm(0xe091f392) " @ umulls pc, r1, r2, r3")
0400     TEST_UNSUPPORTED(__inst_arm(0xe09f1392) " @ umulls r1, pc, r2, r3")
0401 
0402     TEST_RRRR(  "umlal  r",0, VAL1,", r",1, VAL2,", r",2, VAL3,", r",3, VAL4)
0403     TEST_RRRR(  "umlalle    r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
0404     TEST_RRR(   "umlal  r",14,VAL3,", r",7, VAL4,", r",5, VAL1,", r13")
0405     TEST_UNSUPPORTED(__inst_arm(0xe0af1392) " @ umlal pc, r1, r2, r3")
0406     TEST_UNSUPPORTED(__inst_arm(0xe0a1f392) " @ umlal r1, pc, r2, r3")
0407     TEST_RRRR(  "umlals r",0, VAL1,", r",1, VAL2,", r",2, VAL3,", r",3, VAL4)
0408     TEST_RRRR(  "umlalsle   r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
0409     TEST_RRR(   "umlals r",14,VAL3,", r",7, VAL4,", r",5, VAL1,", r13")
0410     TEST_UNSUPPORTED(__inst_arm(0xe0bf1392) " @ umlals pc, r1, r2, r3")
0411     TEST_UNSUPPORTED(__inst_arm(0xe0b1f392) " @ umlals r1, pc, r2, r3")
0412 
0413     TEST_RR(  "smull    r0, r1, r",2, VAL1,", r",3, VAL2,"")
0414     TEST_RR(  "smullls  r7, r8, r",9, VAL2,", r",10, VAL1,"")
0415     TEST_R(   "smull    lr, r12, r",11,VAL3,", r13")
0416     TEST_UNSUPPORTED(__inst_arm(0xe0c1f392) " @ smull pc, r1, r2, r3")
0417     TEST_UNSUPPORTED(__inst_arm(0xe0cf1392) " @ smull r1, pc, r2, r3")
0418     TEST_RR(  "smulls   r0, r1, r",2, VAL1,", r",3, VAL2,"")
0419     TEST_RR(  "smullsls r7, r8, r",9, VAL2,", r",10, VAL1,"")
0420     TEST_R(   "smulls   lr, r12, r",11,VAL3,", r13")
0421     TEST_UNSUPPORTED(__inst_arm(0xe0d1f392) " @ smulls pc, r1, r2, r3")
0422     TEST_UNSUPPORTED(__inst_arm(0xe0df1392) " @ smulls r1, pc, r2, r3")
0423 
0424     TEST_RRRR(  "smlal  r",0, VAL1,", r",1, VAL2,", r",2, VAL3,", r",3, VAL4)
0425     TEST_RRRR(  "smlalle    r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
0426     TEST_RRR(   "smlal  r",14,VAL3,", r",7, VAL4,", r",5, VAL1,", r13")
0427     TEST_UNSUPPORTED(__inst_arm(0xe0ef1392) " @ smlal pc, r1, r2, r3")
0428     TEST_UNSUPPORTED(__inst_arm(0xe0e1f392) " @ smlal r1, pc, r2, r3")
0429     TEST_RRRR(  "smlals r",0, VAL1,", r",1, VAL2,", r",2, VAL3,", r",3, VAL4)
0430     TEST_RRRR(  "smlalsle   r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
0431     TEST_RRR(   "smlals r",14,VAL3,", r",7, VAL4,", r",5, VAL1,", r13")
0432     TEST_UNSUPPORTED(__inst_arm(0xe0ff1392) " @ smlals pc, r1, r2, r3")
0433     TEST_UNSUPPORTED(__inst_arm(0xe0f0f392) " @ smlals r0, pc, r2, r3")
0434     TEST_UNSUPPORTED(__inst_arm(0xe0f0139f) " @ smlals r0, r1, pc, r3")
0435     TEST_UNSUPPORTED(__inst_arm(0xe0f01f92) " @ smlals r0, r1, r2, pc")
0436 
0437     TEST_GROUP("Synchronization primitives")
0438 
0439 #if __LINUX_ARM_ARCH__ < 6
0440     TEST_RP("swp    lr, r",7,VAL2,", [r",8,0,"]")
0441     TEST_R( "swpvs  r0, r",1,VAL1,", [sp]")
0442     TEST_RP("swp    sp, r",14,VAL2,", [r",12,13*4,"]")
0443 #else
0444     TEST_UNSUPPORTED(__inst_arm(0xe108e097) " @ swp lr, r7, [r8]")
0445     TEST_UNSUPPORTED(__inst_arm(0x610d0091) " @ swpvs   r0, r1, [sp]")
0446     TEST_UNSUPPORTED(__inst_arm(0xe10cd09e) " @ swp sp, r14 [r12]")
0447 #endif
0448     TEST_UNSUPPORTED(__inst_arm(0xe102f091) " @ swp pc, r1, [r2]")
0449     TEST_UNSUPPORTED(__inst_arm(0xe102009f) " @ swp r0, pc, [r2]")
0450     TEST_UNSUPPORTED(__inst_arm(0xe10f0091) " @ swp r0, r1, [pc]")
0451 #if __LINUX_ARM_ARCH__ < 6
0452     TEST_RP("swpb   lr, r",7,VAL2,", [r",8,0,"]")
0453     TEST_R( "swpbvs r0, r",1,VAL1,", [sp]")
0454 #else
0455     TEST_UNSUPPORTED(__inst_arm(0xe148e097) " @ swpb    lr, r7, [r8]")
0456     TEST_UNSUPPORTED(__inst_arm(0x614d0091) " @ swpvsb  r0, r1, [sp]")
0457 #endif
0458     TEST_UNSUPPORTED(__inst_arm(0xe142f091) " @ swpb pc, r1, [r2]")
0459 
0460     TEST_UNSUPPORTED(__inst_arm(0xe1100090)) /* Unallocated space */
0461     TEST_UNSUPPORTED(__inst_arm(0xe1200090)) /* Unallocated space */
0462     TEST_UNSUPPORTED(__inst_arm(0xe1300090)) /* Unallocated space */
0463     TEST_UNSUPPORTED(__inst_arm(0xe1500090)) /* Unallocated space */
0464     TEST_UNSUPPORTED(__inst_arm(0xe1600090)) /* Unallocated space */
0465     TEST_UNSUPPORTED(__inst_arm(0xe1700090)) /* Unallocated space */
0466 #if __LINUX_ARM_ARCH__ >= 6
0467     TEST_UNSUPPORTED("ldrex r2, [sp]")
0468 #endif
0469 #if (__LINUX_ARM_ARCH__ >= 7) || defined(CONFIG_CPU_32v6K)
0470     TEST_UNSUPPORTED("strexd    r0, r2, r3, [sp]")
0471     TEST_UNSUPPORTED("ldrexd    r2, r3, [sp]")
0472     TEST_UNSUPPORTED("strexb    r0, r2, [sp]")
0473     TEST_UNSUPPORTED("ldrexb    r2, [sp]")
0474     TEST_UNSUPPORTED("strexh    r0, r2, [sp]")
0475     TEST_UNSUPPORTED("ldrexh    r2, [sp]")
0476 #endif
0477     TEST_GROUP("Extra load/store instructions")
0478 
0479     TEST_RPR(  "strh    r",0, VAL1,", [r",1, 48,", -r",2, 24,"]")
0480     TEST_RPR(  "strheq  r",14,VAL2,", [r",11,0, ", r",12, 48,"]")
0481     TEST_UNSUPPORTED(  "strheq  r14, [r13, r12]")
0482     TEST_UNSUPPORTED(  "strheq  r14, [r12, r13]")
0483     TEST_RPR(  "strh    r",1, VAL1,", [r",2, 24,", r",3,  48,"]!")
0484     TEST_RPR(  "strhne  r",12,VAL2,", [r",11,48,", -r",10,24,"]!")
0485     TEST_RPR(  "strh    r",2, VAL1,", [r",3, 24,"], r",4, 48,"")
0486     TEST_RPR(  "strh    r",10,VAL2,", [r",9, 48,"], -r",11,24,"")
0487     TEST_UNSUPPORTED(__inst_arm(0xe1afc0ba) "   @ strh r12, [pc, r10]!")
0488     TEST_UNSUPPORTED(__inst_arm(0xe089f0bb) "   @ strh pc, [r9], r11")
0489     TEST_UNSUPPORTED(__inst_arm(0xe089a0bf) "   @ strh r10, [r9], pc")
0490 
0491     TEST_PR(   "ldrh    r0, [r",0,  48,", -r",2, 24,"]")
0492     TEST_PR(   "ldrhcs  r14, [r",13,0, ", r",12, 48,"]")
0493     TEST_PR(   "ldrh    r1, [r",2,  24,", r",3,  48,"]!")
0494     TEST_PR(   "ldrhcc  r12, [r",11,48,", -r",10,24,"]!")
0495     TEST_PR(   "ldrh    r2, [r",3,  24,"], r",4, 48,"")
0496     TEST_PR(   "ldrh    r10, [r",9, 48,"], -r",11,24,"")
0497     TEST_UNSUPPORTED(__inst_arm(0xe1bfc0ba) "   @ ldrh r12, [pc, r10]!")
0498     TEST_UNSUPPORTED(__inst_arm(0xe099f0bb) "   @ ldrh pc, [r9], r11")
0499     TEST_UNSUPPORTED(__inst_arm(0xe099a0bf) "   @ ldrh r10, [r9], pc")
0500 
0501     TEST_RP(   "strh    r",0, VAL1,", [r",1, 24,", #-2]")
0502     TEST_RP(   "strhmi  r",14,VAL2,", [r",13,0, ", #2]")
0503     TEST_RP(   "strh    r",1, VAL1,", [r",2, 24,", #4]!")
0504     TEST_RP(   "strhpl  r",12,VAL2,", [r",11,24,", #-4]!")
0505     TEST_RP(   "strh    r",2, VAL1,", [r",3, 24,"], #48")
0506     TEST_RP(   "strh    r",10,VAL2,", [r",9, 64,"], #-48")
0507     TEST_RP(   "strh    r",3, VAL1,", [r",13,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"]!")
0508     TEST_UNSUPPORTED("strh r3, [r13, #-"__stringify(MAX_STACK_SIZE)"-8]!")
0509     TEST_RP(   "strh    r",4, VAL1,", [r",14,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"-8]!")
0510     TEST_UNSUPPORTED(__inst_arm(0xe1efc3b0) "   @ strh r12, [pc, #48]!")
0511     TEST_UNSUPPORTED(__inst_arm(0xe0c9f3b0) "   @ strh pc, [r9], #48")
0512 
0513     TEST_P(    "ldrh    r0, [r",0,  24,", #-2]")
0514     TEST_P(    "ldrhvs  r14, [r",13,0, ", #2]")
0515     TEST_P(    "ldrh    r1, [r",2,  24,", #4]!")
0516     TEST_P(    "ldrhvc  r12, [r",11,24,", #-4]!")
0517     TEST_P(    "ldrh    r2, [r",3,  24,"], #48")
0518     TEST_P(    "ldrh    r10, [r",9, 64,"], #-48")
0519     TEST(      "ldrh    r0, [pc, #0]")
0520     TEST_UNSUPPORTED(__inst_arm(0xe1ffc3b0) "   @ ldrh r12, [pc, #48]!")
0521     TEST_UNSUPPORTED(__inst_arm(0xe0d9f3b0) "   @ ldrh pc, [r9], #48")
0522 
0523     TEST_PR(   "ldrsb   r0, [r",0,  48,", -r",2, 24,"]")
0524     TEST_PR(   "ldrsbhi r14, [r",13,0,", r",12,  48,"]")
0525     TEST_PR(   "ldrsb   r1, [r",2,  24,", r",3,  48,"]!")
0526     TEST_PR(   "ldrsbls r12, [r",11,48,", -r",10,24,"]!")
0527     TEST_PR(   "ldrsb   r2, [r",3,  24,"], r",4, 48,"")
0528     TEST_PR(   "ldrsb   r10, [r",9, 48,"], -r",11,24,"")
0529     TEST_UNSUPPORTED(__inst_arm(0xe1bfc0da) "   @ ldrsb r12, [pc, r10]!")
0530     TEST_UNSUPPORTED(__inst_arm(0xe099f0db) "   @ ldrsb pc, [r9], r11")
0531 
0532     TEST_P(    "ldrsb   r0, [r",0,  24,", #-1]")
0533     TEST_P(    "ldrsbge r14, [r",13,0, ", #1]")
0534     TEST_P(    "ldrsb   r1, [r",2,  24,", #4]!")
0535     TEST_P(    "ldrsblt r12, [r",11,24,", #-4]!")
0536     TEST_P(    "ldrsb   r2, [r",3,  24,"], #48")
0537     TEST_P(    "ldrsb   r10, [r",9, 64,"], #-48")
0538     TEST(      "ldrsb   r0, [pc, #0]")
0539     TEST_UNSUPPORTED(__inst_arm(0xe1ffc3d0) "   @ ldrsb r12, [pc, #48]!")
0540     TEST_UNSUPPORTED(__inst_arm(0xe0d9f3d0) "   @ ldrsb pc, [r9], #48")
0541 
0542     TEST_PR(   "ldrsh   r0, [r",0,  48,", -r",2, 24,"]")
0543     TEST_PR(   "ldrshgt r14, [r",13,0, ", r",12, 48,"]")
0544     TEST_PR(   "ldrsh   r1, [r",2,  24,", r",3,  48,"]!")
0545     TEST_PR(   "ldrshle r12, [r",11,48,", -r",10,24,"]!")
0546     TEST_PR(   "ldrsh   r2, [r",3,  24,"], r",4, 48,"")
0547     TEST_PR(   "ldrsh   r10, [r",9, 48,"], -r",11,24,"")
0548     TEST_UNSUPPORTED(__inst_arm(0xe1bfc0fa) "   @ ldrsh r12, [pc, r10]!")
0549     TEST_UNSUPPORTED(__inst_arm(0xe099f0fb) "   @ ldrsh pc, [r9], r11")
0550 
0551     TEST_P(    "ldrsh   r0, [r",0,  24,", #-1]")
0552     TEST_P(    "ldrsheq r14, [r",13,0 ,", #1]")
0553     TEST_P(    "ldrsh   r1, [r",2,  24,", #4]!")
0554     TEST_P(    "ldrshne r12, [r",11,24,", #-4]!")
0555     TEST_P(    "ldrsh   r2, [r",3,  24,"], #48")
0556     TEST_P(    "ldrsh   r10, [r",9, 64,"], #-48")
0557     TEST(      "ldrsh   r0, [pc, #0]")
0558     TEST_UNSUPPORTED(__inst_arm(0xe1ffc3f0) "   @ ldrsh r12, [pc, #48]!")
0559     TEST_UNSUPPORTED(__inst_arm(0xe0d9f3f0) "   @ ldrsh pc, [r9], #48")
0560 
0561 #if __LINUX_ARM_ARCH__ >= 7
0562     TEST_UNSUPPORTED("strht r1, [r2], r3")
0563     TEST_UNSUPPORTED("ldrht r1, [r2], r3")
0564     TEST_UNSUPPORTED("strht r1, [r2], #48")
0565     TEST_UNSUPPORTED("ldrht r1, [r2], #48")
0566     TEST_UNSUPPORTED("ldrsbt    r1, [r2], r3")
0567     TEST_UNSUPPORTED("ldrsbt    r1, [r2], #48")
0568     TEST_UNSUPPORTED("ldrsht    r1, [r2], r3")
0569     TEST_UNSUPPORTED("ldrsht    r1, [r2], #48")
0570 #endif
0571 
0572 #if __LINUX_ARM_ARCH__ >= 5
0573     TEST_RPR(  "strd    r",0, VAL1,", [r",1, 48,", -r",2,24,"]")
0574     TEST_RPR(  "strdcc  r",8, VAL2,", [r",11,0, ", r",12,48,"]")
0575     TEST_UNSUPPORTED(  "strdcc r8, [r13, r12]")
0576     TEST_UNSUPPORTED(  "strdcc r8, [r12, r13]")
0577     TEST_RPR(  "strd    r",4, VAL1,", [r",2, 24,", r",3, 48,"]!")
0578     TEST_RPR(  "strdcs  r",12,VAL2,", r13, [r",11,48,", -r",10,24,"]!")
0579     TEST_RPR(  "strd    r",2, VAL1,", r3, [r",5, 24,"], r",4,48,"")
0580     TEST_RPR(  "strd    r",10,VAL2,", r11, [r",9, 48,"], -r",7,24,"")
0581     TEST_UNSUPPORTED(__inst_arm(0xe1afc0fa) "   @ strd r12, [pc, r10]!")
0582 
0583     TEST_PR(   "ldrd    r0, [r",0, 48,", -r",2,24,"]")
0584     TEST_PR(   "ldrdmi  r8, [r",13,0, ", r",12,48,"]")
0585     TEST_PR(   "ldrd    r4, [r",2, 24,", r",3, 48,"]!")
0586     TEST_PR(   "ldrdpl  r6, [r",11,48,", -r",10,24,"]!")
0587     TEST_PR(   "ldrd    r2, r3, [r",5, 24,"], r",4,48,"")
0588     TEST_PR(   "ldrd    r10, r11, [r",9,48,"], -r",7,24,"")
0589     TEST_UNSUPPORTED(__inst_arm(0xe1afc0da) "   @ ldrd r12, [pc, r10]!")
0590     TEST_UNSUPPORTED(__inst_arm(0xe089f0db) "   @ ldrd pc, [r9], r11")
0591     TEST_UNSUPPORTED(__inst_arm(0xe089e0db) "   @ ldrd lr, [r9], r11")
0592     TEST_UNSUPPORTED(__inst_arm(0xe089c0df) "   @ ldrd r12, [r9], pc")
0593 
0594     TEST_RP(   "strd    r",0, VAL1,", [r",1, 24,", #-8]")
0595     TEST_RP(   "strdvs  r",8, VAL2,", [r",13,0, ", #8]")
0596     TEST_RP(   "strd    r",4, VAL1,", [r",2, 24,", #16]!")
0597     TEST_RP(   "strdvc  r",12,VAL2,", r13, [r",11,24,", #-16]!")
0598     TEST_RP(   "strd    r",2, VAL1,", [r",4, 24,"], #48")
0599     TEST_RP(   "strd    r",10,VAL2,", [r",9, 64,"], #-48")
0600     TEST_RP(   "strd    r",6, VAL1,", [r",13,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"]!")
0601     TEST_UNSUPPORTED("strd r6, [r13, #-"__stringify(MAX_STACK_SIZE)"-8]!")
0602     TEST_RP(   "strd    r",4, VAL1,", [r",12,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"-8]!")
0603     TEST_UNSUPPORTED(__inst_arm(0xe1efc3f0) "   @ strd r12, [pc, #48]!")
0604 
0605     TEST_P(    "ldrd    r0, [r",0, 24,", #-8]")
0606     TEST_P(    "ldrdhi  r8, [r",13,0, ", #8]")
0607     TEST_P(    "ldrd    r4, [r",2, 24,", #16]!")
0608     TEST_P(    "ldrdls  r6, [r",11,24,", #-16]!")
0609     TEST_P(    "ldrd    r2, [r",5, 24,"], #48")
0610     TEST_P(    "ldrd    r10, [r",9,6,"], #-48")
0611     TEST_UNSUPPORTED(__inst_arm(0xe1efc3d0) "   @ ldrd r12, [pc, #48]!")
0612     TEST_UNSUPPORTED(__inst_arm(0xe0c9f3d0) "   @ ldrd pc, [r9], #48")
0613     TEST_UNSUPPORTED(__inst_arm(0xe0c9e3d0) "   @ ldrd lr, [r9], #48")
0614 #endif
0615 
0616     TEST_GROUP("Miscellaneous")
0617 
0618 #if __LINUX_ARM_ARCH__ >= 7
0619     TEST("movw  r0, #0")
0620     TEST("movw  r0, #0xffff")
0621     TEST("movw  lr, #0xffff")
0622     TEST_UNSUPPORTED(__inst_arm(0xe300f000) "   @ movw pc, #0")
0623     TEST_R("movt    r",0, VAL1,", #0")
0624     TEST_R("movt    r",0, VAL2,", #0xffff")
0625     TEST_R("movt    r",14,VAL1,", #0xffff")
0626     TEST_UNSUPPORTED(__inst_arm(0xe340f000) "   @ movt pc, #0")
0627 #endif
0628 
0629     TEST_UNSUPPORTED("msr   cpsr, 0x13")
0630     TEST_UNSUPPORTED("msr   cpsr_f, 0xf0000000")
0631     TEST_UNSUPPORTED("msr   spsr, 0x13")
0632 
0633 #if __LINUX_ARM_ARCH__ >= 7
0634     TEST_SUPPORTED("yield")
0635     TEST("sev")
0636     TEST("nop")
0637     TEST("wfi")
0638     TEST_SUPPORTED("wfe")
0639     TEST_UNSUPPORTED("dbg #0")
0640 #endif
0641 
0642     TEST_GROUP("Load/store word and unsigned byte")
0643 
0644 #define LOAD_STORE(byte)                            \
0645     TEST_RP( "str"byte" r",0, VAL1,", [r",1, 24,", #-2]")       \
0646     TEST_RP( "str"byte" r",14,VAL2,", [r",13,0, ", #2]")        \
0647     TEST_RP( "str"byte" r",1, VAL1,", [r",2, 24,", #4]!")       \
0648     TEST_RP( "str"byte" r",12,VAL2,", [r",11,24,", #-4]!")      \
0649     TEST_RP( "str"byte" r",2, VAL1,", [r",3, 24,"], #48")       \
0650     TEST_RP( "str"byte" r",10,VAL2,", [r",9, 64,"], #-48")      \
0651     TEST_RP( "str"byte" r",3, VAL1,", [r",13,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"]!") \
0652     TEST_UNSUPPORTED("str"byte" r3, [r13, #-"__stringify(MAX_STACK_SIZE)"-8]!")             \
0653     TEST_RP( "str"byte" r",4, VAL1,", [r",10,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"-8]!") \
0654     TEST_RPR("str"byte" r",0, VAL1,", [r",1, 48,", -r",2, 24,"]")   \
0655     TEST_RPR("str"byte" r",14,VAL2,", [r",11,0, ", r",12, 48,"]")   \
0656     TEST_UNSUPPORTED("str"byte" r14, [r13, r12]")               \
0657     TEST_UNSUPPORTED("str"byte" r14, [r12, r13]")               \
0658     TEST_RPR("str"byte" r",1, VAL1,", [r",2, 24,", r",3,  48,"]!")  \
0659     TEST_RPR("str"byte" r",12,VAL2,", [r",11,48,", -r",10,24,"]!")  \
0660     TEST_RPR("str"byte" r",2, VAL1,", [r",3, 24,"], r",4, 48,"")    \
0661     TEST_RPR("str"byte" r",10,VAL2,", [r",9, 48,"], -r",11,24,"")   \
0662     TEST_RPR("str"byte" r",0, VAL1,", [r",1, 24,", r",2,  32,", asl #1]")\
0663     TEST_RPR("str"byte" r",14,VAL2,", [r",11,0, ", r",12, 32,", lsr #2]")\
0664     TEST_UNSUPPORTED("str"byte" r14, [r13, r12, lsr #2]")       \
0665     TEST_RPR("str"byte" r",1, VAL1,", [r",2, 24,", r",3,  32,", asr #3]!")\
0666     TEST_RPR("str"byte" r",12,VAL2,", [r",11,24,", r",10, 4,", ror #31]!")\
0667     TEST_P(  "ldr"byte" r0, [r",0,  24,", #-2]")            \
0668     TEST_P(  "ldr"byte" r14, [r",13,0, ", #2]")             \
0669     TEST_P(  "ldr"byte" r1, [r",2,  24,", #4]!")            \
0670     TEST_P(  "ldr"byte" r12, [r",11,24,", #-4]!")           \
0671     TEST_P(  "ldr"byte" r2, [r",3,  24,"], #48")            \
0672     TEST_P(  "ldr"byte" r10, [r",9, 64,"], #-48")           \
0673     TEST_PR( "ldr"byte" r0, [r",0,  48,", -r",2, 24,"]")        \
0674     TEST_PR( "ldr"byte" r14, [r",13,0, ", r",12, 48,"]")        \
0675     TEST_PR( "ldr"byte" r1, [r",2,  24,", r",3, 48,"]!")        \
0676     TEST_PR( "ldr"byte" r12, [r",11,48,", -r",10,24,"]!")       \
0677     TEST_PR( "ldr"byte" r2, [r",3,  24,"], r",4, 48,"")         \
0678     TEST_PR( "ldr"byte" r10, [r",9, 48,"], -r",11,24,"")        \
0679     TEST_PR( "ldr"byte" r0, [r",0,  24,", r",2,  32,", asl #1]")    \
0680     TEST_PR( "ldr"byte" r14, [r",13,0, ", r",12, 32,", lsr #2]")    \
0681     TEST_PR( "ldr"byte" r1, [r",2,  24,", r",3,  32,", asr #3]!")   \
0682     TEST_PR( "ldr"byte" r12, [r",11,24,", r",10, 4,", ror #31]!")   \
0683     TEST(    "ldr"byte" r0, [pc, #0]")                  \
0684     TEST_R(  "ldr"byte" r12, [pc, r",14,0,"]")
0685 
0686     LOAD_STORE("")
0687     TEST_P(   "str  pc, [r",0,0,", #15*4]")
0688     TEST_UNSUPPORTED(   "str    pc, [sp, r2]")
0689     TEST_BF(  "ldr  pc, [sp, #15*4]")
0690     TEST_BF_R("ldr  pc, [sp, r",2,15*4,"]")
0691 
0692     TEST_P(   "str  sp, [r",0,0,", #13*4]")
0693     TEST_UNSUPPORTED(   "str    sp, [sp, r2]")
0694     TEST_BF(  "ldr  sp, [sp, #13*4]")
0695     TEST_BF_R("ldr  sp, [sp, r",2,13*4,"]")
0696 
0697 #ifdef CONFIG_THUMB2_KERNEL
0698     TEST_ARM_TO_THUMB_INTERWORK_P("ldr  pc, [r",0,0,", #15*4]")
0699 #endif
0700     TEST_UNSUPPORTED(__inst_arm(0xe5af6008) "   @ str r6, [pc, #8]!")
0701     TEST_UNSUPPORTED(__inst_arm(0xe7af6008) "   @ str r6, [pc, r8]!")
0702     TEST_UNSUPPORTED(__inst_arm(0xe5bf6008) "   @ ldr r6, [pc, #8]!")
0703     TEST_UNSUPPORTED(__inst_arm(0xe7bf6008) "   @ ldr r6, [pc, r8]!")
0704     TEST_UNSUPPORTED(__inst_arm(0xe788600f) "   @ str r6, [r8, pc]")
0705     TEST_UNSUPPORTED(__inst_arm(0xe798600f) "   @ ldr r6, [r8, pc]")
0706 
0707     LOAD_STORE("b")
0708     TEST_UNSUPPORTED(__inst_arm(0xe5f7f008) "   @ ldrb pc, [r7, #8]!")
0709     TEST_UNSUPPORTED(__inst_arm(0xe7f7f008) "   @ ldrb pc, [r7, r8]!")
0710     TEST_UNSUPPORTED(__inst_arm(0xe5ef6008) "   @ strb r6, [pc, #8]!")
0711     TEST_UNSUPPORTED(__inst_arm(0xe7ef6008) "   @ strb r6, [pc, r3]!")
0712     TEST_UNSUPPORTED(__inst_arm(0xe5ff6008) "   @ ldrb r6, [pc, #8]!")
0713     TEST_UNSUPPORTED(__inst_arm(0xe7ff6008) "   @ ldrb r6, [pc, r3]!")
0714 
0715     TEST_UNSUPPORTED("ldrt  r0, [r1], #4")
0716     TEST_UNSUPPORTED("ldrt  r1, [r2], r3")
0717     TEST_UNSUPPORTED("strt  r2, [r3], #4")
0718     TEST_UNSUPPORTED("strt  r3, [r4], r5")
0719     TEST_UNSUPPORTED("ldrbt r4, [r5], #4")
0720     TEST_UNSUPPORTED("ldrbt r5, [r6], r7")
0721     TEST_UNSUPPORTED("strbt r6, [r7], #4")
0722     TEST_UNSUPPORTED("strbt r7, [r8], r9")
0723 
0724 #if __LINUX_ARM_ARCH__ >= 7
0725     TEST_GROUP("Parallel addition and subtraction, signed")
0726 
0727     TEST_UNSUPPORTED(__inst_arm(0xe6000010) "") /* Unallocated space */
0728     TEST_UNSUPPORTED(__inst_arm(0xe60fffff) "") /* Unallocated space */
0729 
0730     TEST_RR(    "sadd16 r0, r",0,  HH1,", r",1, HH2,"")
0731     TEST_RR(    "sadd16 r14, r",12,HH2,", r",10,HH1,"")
0732     TEST_UNSUPPORTED(__inst_arm(0xe61cff1a) "   @ sadd16    pc, r12, r10")
0733     TEST_RR(    "sasx   r0, r",0,  HH1,", r",1, HH2,"")
0734     TEST_RR(    "sasx   r14, r",12,HH2,", r",10,HH1,"")
0735     TEST_UNSUPPORTED(__inst_arm(0xe61cff3a) "   @ sasx  pc, r12, r10")
0736     TEST_RR(    "ssax   r0, r",0,  HH1,", r",1, HH2,"")
0737     TEST_RR(    "ssax   r14, r",12,HH2,", r",10,HH1,"")
0738     TEST_UNSUPPORTED(__inst_arm(0xe61cff5a) "   @ ssax  pc, r12, r10")
0739     TEST_RR(    "ssub16 r0, r",0,  HH1,", r",1, HH2,"")
0740     TEST_RR(    "ssub16 r14, r",12,HH2,", r",10,HH1,"")
0741     TEST_UNSUPPORTED(__inst_arm(0xe61cff7a) "   @ ssub16    pc, r12, r10")
0742     TEST_RR(    "sadd8  r0, r",0,  HH1,", r",1, HH2,"")
0743     TEST_RR(    "sadd8  r14, r",12,HH2,", r",10,HH1,"")
0744     TEST_UNSUPPORTED(__inst_arm(0xe61cff9a) "   @ sadd8 pc, r12, r10")
0745     TEST_UNSUPPORTED(__inst_arm(0xe61000b0) "") /* Unallocated space */
0746     TEST_UNSUPPORTED(__inst_arm(0xe61fffbf) "") /* Unallocated space */
0747     TEST_UNSUPPORTED(__inst_arm(0xe61000d0) "") /* Unallocated space */
0748     TEST_UNSUPPORTED(__inst_arm(0xe61fffdf) "") /* Unallocated space */
0749     TEST_RR(    "ssub8  r0, r",0,  HH1,", r",1, HH2,"")
0750     TEST_RR(    "ssub8  r14, r",12,HH2,", r",10,HH1,"")
0751     TEST_UNSUPPORTED(__inst_arm(0xe61cfffa) "   @ ssub8 pc, r12, r10")
0752 
0753     TEST_RR(    "qadd16 r0, r",0,  HH1,", r",1, HH2,"")
0754     TEST_RR(    "qadd16 r14, r",12,HH2,", r",10,HH1,"")
0755     TEST_UNSUPPORTED(__inst_arm(0xe62cff1a) "   @ qadd16    pc, r12, r10")
0756     TEST_RR(    "qasx   r0, r",0,  HH1,", r",1, HH2,"")
0757     TEST_RR(    "qasx   r14, r",12,HH2,", r",10,HH1,"")
0758     TEST_UNSUPPORTED(__inst_arm(0xe62cff3a) "   @ qasx  pc, r12, r10")
0759     TEST_RR(    "qsax   r0, r",0,  HH1,", r",1, HH2,"")
0760     TEST_RR(    "qsax   r14, r",12,HH2,", r",10,HH1,"")
0761     TEST_UNSUPPORTED(__inst_arm(0xe62cff5a) "   @ qsax  pc, r12, r10")
0762     TEST_RR(    "qsub16 r0, r",0,  HH1,", r",1, HH2,"")
0763     TEST_RR(    "qsub16 r14, r",12,HH2,", r",10,HH1,"")
0764     TEST_UNSUPPORTED(__inst_arm(0xe62cff7a) "   @ qsub16    pc, r12, r10")
0765     TEST_RR(    "qadd8  r0, r",0,  HH1,", r",1, HH2,"")
0766     TEST_RR(    "qadd8  r14, r",12,HH2,", r",10,HH1,"")
0767     TEST_UNSUPPORTED(__inst_arm(0xe62cff9a) "   @ qadd8 pc, r12, r10")
0768     TEST_UNSUPPORTED(__inst_arm(0xe62000b0) "") /* Unallocated space */
0769     TEST_UNSUPPORTED(__inst_arm(0xe62fffbf) "") /* Unallocated space */
0770     TEST_UNSUPPORTED(__inst_arm(0xe62000d0) "") /* Unallocated space */
0771     TEST_UNSUPPORTED(__inst_arm(0xe62fffdf) "") /* Unallocated space */
0772     TEST_RR(    "qsub8  r0, r",0,  HH1,", r",1, HH2,"")
0773     TEST_RR(    "qsub8  r14, r",12,HH2,", r",10,HH1,"")
0774     TEST_UNSUPPORTED(__inst_arm(0xe62cfffa) "   @ qsub8 pc, r12, r10")
0775 
0776     TEST_RR(    "shadd16    r0, r",0,  HH1,", r",1, HH2,"")
0777     TEST_RR(    "shadd16    r14, r",12,HH2,", r",10,HH1,"")
0778     TEST_UNSUPPORTED(__inst_arm(0xe63cff1a) "   @ shadd16   pc, r12, r10")
0779     TEST_RR(    "shasx  r0, r",0,  HH1,", r",1, HH2,"")
0780     TEST_RR(    "shasx  r14, r",12,HH2,", r",10,HH1,"")
0781     TEST_UNSUPPORTED(__inst_arm(0xe63cff3a) "   @ shasx pc, r12, r10")
0782     TEST_RR(    "shsax  r0, r",0,  HH1,", r",1, HH2,"")
0783     TEST_RR(    "shsax  r14, r",12,HH2,", r",10,HH1,"")
0784     TEST_UNSUPPORTED(__inst_arm(0xe63cff5a) "   @ shsax pc, r12, r10")
0785     TEST_RR(    "shsub16    r0, r",0,  HH1,", r",1, HH2,"")
0786     TEST_RR(    "shsub16    r14, r",12,HH2,", r",10,HH1,"")
0787     TEST_UNSUPPORTED(__inst_arm(0xe63cff7a) "   @ shsub16   pc, r12, r10")
0788     TEST_RR(    "shadd8 r0, r",0,  HH1,", r",1, HH2,"")
0789     TEST_RR(    "shadd8 r14, r",12,HH2,", r",10,HH1,"")
0790     TEST_UNSUPPORTED(__inst_arm(0xe63cff9a) "   @ shadd8    pc, r12, r10")
0791     TEST_UNSUPPORTED(__inst_arm(0xe63000b0) "") /* Unallocated space */
0792     TEST_UNSUPPORTED(__inst_arm(0xe63fffbf) "") /* Unallocated space */
0793     TEST_UNSUPPORTED(__inst_arm(0xe63000d0) "") /* Unallocated space */
0794     TEST_UNSUPPORTED(__inst_arm(0xe63fffdf) "") /* Unallocated space */
0795     TEST_RR(    "shsub8 r0, r",0,  HH1,", r",1, HH2,"")
0796     TEST_RR(    "shsub8 r14, r",12,HH2,", r",10,HH1,"")
0797     TEST_UNSUPPORTED(__inst_arm(0xe63cfffa) "   @ shsub8    pc, r12, r10")
0798 
0799     TEST_GROUP("Parallel addition and subtraction, unsigned")
0800 
0801     TEST_UNSUPPORTED(__inst_arm(0xe6400010) "") /* Unallocated space */
0802     TEST_UNSUPPORTED(__inst_arm(0xe64fffff) "") /* Unallocated space */
0803 
0804     TEST_RR(    "uadd16 r0, r",0,  HH1,", r",1, HH2,"")
0805     TEST_RR(    "uadd16 r14, r",12,HH2,", r",10,HH1,"")
0806     TEST_UNSUPPORTED(__inst_arm(0xe65cff1a) "   @ uadd16    pc, r12, r10")
0807     TEST_RR(    "uasx   r0, r",0,  HH1,", r",1, HH2,"")
0808     TEST_RR(    "uasx   r14, r",12,HH2,", r",10,HH1,"")
0809     TEST_UNSUPPORTED(__inst_arm(0xe65cff3a) "   @ uasx  pc, r12, r10")
0810     TEST_RR(    "usax   r0, r",0,  HH1,", r",1, HH2,"")
0811     TEST_RR(    "usax   r14, r",12,HH2,", r",10,HH1,"")
0812     TEST_UNSUPPORTED(__inst_arm(0xe65cff5a) "   @ usax  pc, r12, r10")
0813     TEST_RR(    "usub16 r0, r",0,  HH1,", r",1, HH2,"")
0814     TEST_RR(    "usub16 r14, r",12,HH2,", r",10,HH1,"")
0815     TEST_UNSUPPORTED(__inst_arm(0xe65cff7a) "   @ usub16    pc, r12, r10")
0816     TEST_RR(    "uadd8  r0, r",0,  HH1,", r",1, HH2,"")
0817     TEST_RR(    "uadd8  r14, r",12,HH2,", r",10,HH1,"")
0818     TEST_UNSUPPORTED(__inst_arm(0xe65cff9a) "   @ uadd8 pc, r12, r10")
0819     TEST_UNSUPPORTED(__inst_arm(0xe65000b0) "") /* Unallocated space */
0820     TEST_UNSUPPORTED(__inst_arm(0xe65fffbf) "") /* Unallocated space */
0821     TEST_UNSUPPORTED(__inst_arm(0xe65000d0) "") /* Unallocated space */
0822     TEST_UNSUPPORTED(__inst_arm(0xe65fffdf) "") /* Unallocated space */
0823     TEST_RR(    "usub8  r0, r",0,  HH1,", r",1, HH2,"")
0824     TEST_RR(    "usub8  r14, r",12,HH2,", r",10,HH1,"")
0825     TEST_UNSUPPORTED(__inst_arm(0xe65cfffa) "   @ usub8 pc, r12, r10")
0826 
0827     TEST_RR(    "uqadd16    r0, r",0,  HH1,", r",1, HH2,"")
0828     TEST_RR(    "uqadd16    r14, r",12,HH2,", r",10,HH1,"")
0829     TEST_UNSUPPORTED(__inst_arm(0xe66cff1a) "   @ uqadd16   pc, r12, r10")
0830     TEST_RR(    "uqasx  r0, r",0,  HH1,", r",1, HH2,"")
0831     TEST_RR(    "uqasx  r14, r",12,HH2,", r",10,HH1,"")
0832     TEST_UNSUPPORTED(__inst_arm(0xe66cff3a) "   @ uqasx pc, r12, r10")
0833     TEST_RR(    "uqsax  r0, r",0,  HH1,", r",1, HH2,"")
0834     TEST_RR(    "uqsax  r14, r",12,HH2,", r",10,HH1,"")
0835     TEST_UNSUPPORTED(__inst_arm(0xe66cff5a) "   @ uqsax pc, r12, r10")
0836     TEST_RR(    "uqsub16    r0, r",0,  HH1,", r",1, HH2,"")
0837     TEST_RR(    "uqsub16    r14, r",12,HH2,", r",10,HH1,"")
0838     TEST_UNSUPPORTED(__inst_arm(0xe66cff7a) "   @ uqsub16   pc, r12, r10")
0839     TEST_RR(    "uqadd8 r0, r",0,  HH1,", r",1, HH2,"")
0840     TEST_RR(    "uqadd8 r14, r",12,HH2,", r",10,HH1,"")
0841     TEST_UNSUPPORTED(__inst_arm(0xe66cff9a) "   @ uqadd8    pc, r12, r10")
0842     TEST_UNSUPPORTED(__inst_arm(0xe66000b0) "") /* Unallocated space */
0843     TEST_UNSUPPORTED(__inst_arm(0xe66fffbf) "") /* Unallocated space */
0844     TEST_UNSUPPORTED(__inst_arm(0xe66000d0) "") /* Unallocated space */
0845     TEST_UNSUPPORTED(__inst_arm(0xe66fffdf) "") /* Unallocated space */
0846     TEST_RR(    "uqsub8 r0, r",0,  HH1,", r",1, HH2,"")
0847     TEST_RR(    "uqsub8 r14, r",12,HH2,", r",10,HH1,"")
0848     TEST_UNSUPPORTED(__inst_arm(0xe66cfffa) "   @ uqsub8    pc, r12, r10")
0849 
0850     TEST_RR(    "uhadd16    r0, r",0,  HH1,", r",1, HH2,"")
0851     TEST_RR(    "uhadd16    r14, r",12,HH2,", r",10,HH1,"")
0852     TEST_UNSUPPORTED(__inst_arm(0xe67cff1a) "   @ uhadd16   pc, r12, r10")
0853     TEST_RR(    "uhasx  r0, r",0,  HH1,", r",1, HH2,"")
0854     TEST_RR(    "uhasx  r14, r",12,HH2,", r",10,HH1,"")
0855     TEST_UNSUPPORTED(__inst_arm(0xe67cff3a) "   @ uhasx pc, r12, r10")
0856     TEST_RR(    "uhsax  r0, r",0,  HH1,", r",1, HH2,"")
0857     TEST_RR(    "uhsax  r14, r",12,HH2,", r",10,HH1,"")
0858     TEST_UNSUPPORTED(__inst_arm(0xe67cff5a) "   @ uhsax pc, r12, r10")
0859     TEST_RR(    "uhsub16    r0, r",0,  HH1,", r",1, HH2,"")
0860     TEST_RR(    "uhsub16    r14, r",12,HH2,", r",10,HH1,"")
0861     TEST_UNSUPPORTED(__inst_arm(0xe67cff7a) "   @ uhsub16   pc, r12, r10")
0862     TEST_RR(    "uhadd8 r0, r",0,  HH1,", r",1, HH2,"")
0863     TEST_RR(    "uhadd8 r14, r",12,HH2,", r",10,HH1,"")
0864     TEST_UNSUPPORTED(__inst_arm(0xe67cff9a) "   @ uhadd8    pc, r12, r10")
0865     TEST_UNSUPPORTED(__inst_arm(0xe67000b0) "") /* Unallocated space */
0866     TEST_UNSUPPORTED(__inst_arm(0xe67fffbf) "") /* Unallocated space */
0867     TEST_UNSUPPORTED(__inst_arm(0xe67000d0) "") /* Unallocated space */
0868     TEST_UNSUPPORTED(__inst_arm(0xe67fffdf) "") /* Unallocated space */
0869     TEST_RR(    "uhsub8 r0, r",0,  HH1,", r",1, HH2,"")
0870     TEST_RR(    "uhsub8 r14, r",12,HH2,", r",10,HH1,"")
0871     TEST_UNSUPPORTED(__inst_arm(0xe67cfffa) "   @ uhsub8    pc, r12, r10")
0872     TEST_UNSUPPORTED(__inst_arm(0xe67feffa) "   @ uhsub8    r14, pc, r10")
0873     TEST_UNSUPPORTED(__inst_arm(0xe67cefff) "   @ uhsub8    r14, r12, pc")
0874 #endif /* __LINUX_ARM_ARCH__ >= 7 */
0875 
0876 #if __LINUX_ARM_ARCH__ >= 6
0877     TEST_GROUP("Packing, unpacking, saturation, and reversal")
0878 
0879     TEST_RR(    "pkhbt  r0, r",0,  HH1,", r",1, HH2,"")
0880     TEST_RR(    "pkhbt  r14,r",12, HH1,", r",10,HH2,", lsl #2")
0881     TEST_UNSUPPORTED(__inst_arm(0xe68cf11a) "   @ pkhbt pc, r12, r10, lsl #2")
0882     TEST_RR(    "pkhtb  r0, r",0,  HH1,", r",1, HH2,"")
0883     TEST_RR(    "pkhtb  r14,r",12, HH1,", r",10,HH2,", asr #2")
0884     TEST_UNSUPPORTED(__inst_arm(0xe68cf15a) "   @ pkhtb pc, r12, r10, asr #2")
0885     TEST_UNSUPPORTED(__inst_arm(0xe68fe15a) "   @ pkhtb r14, pc, r10, asr #2")
0886     TEST_UNSUPPORTED(__inst_arm(0xe68ce15f) "   @ pkhtb r14, r12, pc, asr #2")
0887     TEST_UNSUPPORTED(__inst_arm(0xe6900010) "") /* Unallocated space */
0888     TEST_UNSUPPORTED(__inst_arm(0xe69fffdf) "") /* Unallocated space */
0889 
0890     TEST_R(     "ssat   r0, #24, r",0,   VAL1,"")
0891     TEST_R(     "ssat   r14, #24, r",12, VAL2,"")
0892     TEST_R(     "ssat   r0, #24, r",0,   VAL1,", lsl #8")
0893     TEST_R(     "ssat   r14, #24, r",12, VAL2,", asr #8")
0894     TEST_UNSUPPORTED(__inst_arm(0xe6b7f01c) "   @ ssat  pc, #24, r12")
0895 
0896     TEST_R(     "usat   r0, #24, r",0,   VAL1,"")
0897     TEST_R(     "usat   r14, #24, r",12, VAL2,"")
0898     TEST_R(     "usat   r0, #24, r",0,   VAL1,", lsl #8")
0899     TEST_R(     "usat   r14, #24, r",12, VAL2,", asr #8")
0900     TEST_UNSUPPORTED(__inst_arm(0xe6f7f01c) "   @ usat  pc, #24, r12")
0901 
0902     TEST_RR(    "sxtab16    r0, r",0,  HH1,", r",1, HH2,"")
0903     TEST_RR(    "sxtab16    r14,r",12, HH2,", r",10,HH1,", ror #8")
0904     TEST_R(     "sxtb16 r8, r",7,  HH1,"")
0905     TEST_UNSUPPORTED(__inst_arm(0xe68cf47a) "   @ sxtab16   pc,r12, r10, ror #8")
0906 
0907     TEST_RR(    "sel    r0, r",0,  VAL1,", r",1, VAL2,"")
0908     TEST_RR(    "sel    r14, r",12,VAL1,", r",10, VAL2,"")
0909     TEST_UNSUPPORTED(__inst_arm(0xe68cffba) "   @ sel   pc, r12, r10")
0910     TEST_UNSUPPORTED(__inst_arm(0xe68fefba) "   @ sel   r14, pc, r10")
0911     TEST_UNSUPPORTED(__inst_arm(0xe68cefbf) "   @ sel   r14, r12, pc")
0912 
0913     TEST_R(     "ssat16 r0, #12, r",0,   HH1,"")
0914     TEST_R(     "ssat16 r14, #12, r",12, HH2,"")
0915     TEST_UNSUPPORTED(__inst_arm(0xe6abff3c) "   @ ssat16    pc, #12, r12")
0916 
0917     TEST_RR(    "sxtab  r0, r",0,  HH1,", r",1, HH2,"")
0918     TEST_RR(    "sxtab  r14,r",12, HH2,", r",10,HH1,", ror #8")
0919     TEST_R(     "sxtb   r8, r",7,  HH1,"")
0920     TEST_UNSUPPORTED(__inst_arm(0xe6acf47a) "   @ sxtab pc,r12, r10, ror #8")
0921 
0922     TEST_R(     "rev    r0, r",0,   VAL1,"")
0923     TEST_R(     "rev    r14, r",12, VAL2,"")
0924     TEST_UNSUPPORTED(__inst_arm(0xe6bfff3c) "   @ rev   pc, r12")
0925 
0926     TEST_RR(    "sxtah  r0, r",0,  HH1,", r",1, HH2,"")
0927     TEST_RR(    "sxtah  r14,r",12, HH2,", r",10,HH1,", ror #8")
0928     TEST_R(     "sxth   r8, r",7,  HH1,"")
0929     TEST_UNSUPPORTED(__inst_arm(0xe6bcf47a) "   @ sxtah pc,r12, r10, ror #8")
0930 
0931     TEST_R(     "rev16  r0, r",0,   VAL1,"")
0932     TEST_R(     "rev16  r14, r",12, VAL2,"")
0933     TEST_UNSUPPORTED(__inst_arm(0xe6bfffbc) "   @ rev16 pc, r12")
0934 
0935     TEST_RR(    "uxtab16    r0, r",0,  HH1,", r",1, HH2,"")
0936     TEST_RR(    "uxtab16    r14,r",12, HH2,", r",10,HH1,", ror #8")
0937     TEST_R(     "uxtb16 r8, r",7,  HH1,"")
0938     TEST_UNSUPPORTED(__inst_arm(0xe6ccf47a) "   @ uxtab16   pc,r12, r10, ror #8")
0939 
0940     TEST_R(     "usat16 r0, #12, r",0,   HH1,"")
0941     TEST_R(     "usat16 r14, #12, r",12, HH2,"")
0942     TEST_UNSUPPORTED(__inst_arm(0xe6ecff3c) "   @ usat16    pc, #12, r12")
0943     TEST_UNSUPPORTED(__inst_arm(0xe6ecef3f) "   @ usat16    r14, #12, pc")
0944 
0945     TEST_RR(    "uxtab  r0, r",0,  HH1,", r",1, HH2,"")
0946     TEST_RR(    "uxtab  r14,r",12, HH2,", r",10,HH1,", ror #8")
0947     TEST_R(     "uxtb   r8, r",7,  HH1,"")
0948     TEST_UNSUPPORTED(__inst_arm(0xe6ecf47a) "   @ uxtab pc,r12, r10, ror #8")
0949 
0950 #if __LINUX_ARM_ARCH__ >= 7
0951     TEST_R(     "rbit   r0, r",0,   VAL1,"")
0952     TEST_R(     "rbit   r14, r",12, VAL2,"")
0953     TEST_UNSUPPORTED(__inst_arm(0xe6ffff3c) "   @ rbit  pc, r12")
0954 #endif
0955 
0956     TEST_RR(    "uxtah  r0, r",0,  HH1,", r",1, HH2,"")
0957     TEST_RR(    "uxtah  r14,r",12, HH2,", r",10,HH1,", ror #8")
0958     TEST_R(     "uxth   r8, r",7,  HH1,"")
0959     TEST_UNSUPPORTED(__inst_arm(0xe6fff077) "   @ uxth  pc, r7")
0960     TEST_UNSUPPORTED(__inst_arm(0xe6ff807f) "   @ uxth  r8, pc")
0961     TEST_UNSUPPORTED(__inst_arm(0xe6fcf47a) "   @ uxtah pc, r12, r10, ror #8")
0962     TEST_UNSUPPORTED(__inst_arm(0xe6fce47f) "   @ uxtah r14, r12, pc, ror #8")
0963 
0964     TEST_R(     "revsh  r0, r",0,   VAL1,"")
0965     TEST_R(     "revsh  r14, r",12, VAL2,"")
0966     TEST_UNSUPPORTED(__inst_arm(0xe6ffff3c) "   @ revsh pc, r12")
0967     TEST_UNSUPPORTED(__inst_arm(0xe6ffef3f) "   @ revsh r14, pc")
0968 
0969     TEST_UNSUPPORTED(__inst_arm(0xe6900070) "") /* Unallocated space */
0970     TEST_UNSUPPORTED(__inst_arm(0xe69fff7f) "") /* Unallocated space */
0971 
0972     TEST_UNSUPPORTED(__inst_arm(0xe6d00070) "") /* Unallocated space */
0973     TEST_UNSUPPORTED(__inst_arm(0xe6dfff7f) "") /* Unallocated space */
0974 #endif /* __LINUX_ARM_ARCH__ >= 6 */
0975 
0976 #if __LINUX_ARM_ARCH__ >= 6
0977     TEST_GROUP("Signed multiplies")
0978 
0979     TEST_RRR(   "smlad  r0, r",0,  HH1,", r",1, HH2,", r",2, VAL1,"")
0980     TEST_RRR(   "smlad  r14, r",12,HH2,", r",10,HH1,", r",8, VAL2,"")
0981     TEST_UNSUPPORTED(__inst_arm(0xe70f8a1c) "   @ smlad pc, r12, r10, r8")
0982     TEST_RRR(   "smladx r0, r",0,  HH1,", r",1, HH2,", r",2, VAL1,"")
0983     TEST_RRR(   "smladx r14, r",12,HH2,", r",10,HH1,", r",8, VAL2,"")
0984     TEST_UNSUPPORTED(__inst_arm(0xe70f8a3c) "   @ smladx    pc, r12, r10, r8")
0985 
0986     TEST_RR(   "smuad   r0, r",0,  HH1,", r",1, HH2,"")
0987     TEST_RR(   "smuad   r14, r",12,HH2,", r",10,HH1,"")
0988     TEST_UNSUPPORTED(__inst_arm(0xe70ffa1c) "   @ smuad pc, r12, r10")
0989     TEST_RR(   "smuadx  r0, r",0,  HH1,", r",1, HH2,"")
0990     TEST_RR(   "smuadx  r14, r",12,HH2,", r",10,HH1,"")
0991     TEST_UNSUPPORTED(__inst_arm(0xe70ffa3c) "   @ smuadx    pc, r12, r10")
0992 
0993     TEST_RRR(   "smlsd  r0, r",0,  HH1,", r",1, HH2,", r",2, VAL1,"")
0994     TEST_RRR(   "smlsd  r14, r",12,HH2,", r",10,HH1,", r",8, VAL2,"")
0995     TEST_UNSUPPORTED(__inst_arm(0xe70f8a5c) "   @ smlsd pc, r12, r10, r8")
0996     TEST_RRR(   "smlsdx r0, r",0,  HH1,", r",1, HH2,", r",2, VAL1,"")
0997     TEST_RRR(   "smlsdx r14, r",12,HH2,", r",10,HH1,", r",8, VAL2,"")
0998     TEST_UNSUPPORTED(__inst_arm(0xe70f8a7c) "   @ smlsdx    pc, r12, r10, r8")
0999 
1000     TEST_RR(   "smusd   r0, r",0,  HH1,", r",1, HH2,"")
1001     TEST_RR(   "smusd   r14, r",12,HH2,", r",10,HH1,"")
1002     TEST_UNSUPPORTED(__inst_arm(0xe70ffa5c) "   @ smusd pc, r12, r10")
1003     TEST_RR(   "smusdx  r0, r",0,  HH1,", r",1, HH2,"")
1004     TEST_RR(   "smusdx  r14, r",12,HH2,", r",10,HH1,"")
1005     TEST_UNSUPPORTED(__inst_arm(0xe70ffa7c) "   @ smusdx    pc, r12, r10")
1006 
1007     TEST_RRRR( "smlald  r",0, VAL1,", r",1, VAL2, ", r",0, HH1,", r",1, HH2)
1008     TEST_RRRR( "smlald  r",11,VAL2,", r",10,VAL1, ", r",9, HH2,", r",8, HH1)
1009     TEST_UNSUPPORTED(__inst_arm(0xe74af819) "   @ smlald    pc, r10, r9, r8")
1010     TEST_UNSUPPORTED(__inst_arm(0xe74fb819) "   @ smlald    r11, pc, r9, r8")
1011     TEST_UNSUPPORTED(__inst_arm(0xe74ab81f) "   @ smlald    r11, r10, pc, r8")
1012     TEST_UNSUPPORTED(__inst_arm(0xe74abf19) "   @ smlald    r11, r10, r9, pc")
1013 
1014     TEST_RRRR( "smlaldx r",0, VAL1,", r",1, VAL2, ", r",0, HH1,", r",1, HH2)
1015     TEST_RRRR( "smlaldx r",11,VAL2,", r",10,VAL1, ", r",9, HH2,", r",8, HH1)
1016     TEST_UNSUPPORTED(__inst_arm(0xe74af839) "   @ smlaldx   pc, r10, r9, r8")
1017     TEST_UNSUPPORTED(__inst_arm(0xe74fb839) "   @ smlaldx   r11, pc, r9, r8")
1018 
1019     TEST_RRR(  "smmla   r0, r",0,  VAL1,", r",1, VAL2,", r",2, VAL1,"")
1020     TEST_RRR(  "smmla   r14, r",12,VAL2,", r",10,VAL1,", r",8, VAL2,"")
1021     TEST_UNSUPPORTED(__inst_arm(0xe75f8a1c) "   @ smmla pc, r12, r10, r8")
1022     TEST_RRR(  "smmlar  r0, r",0,  VAL1,", r",1, VAL2,", r",2, VAL1,"")
1023     TEST_RRR(  "smmlar  r14, r",12,VAL2,", r",10,VAL1,", r",8, VAL2,"")
1024     TEST_UNSUPPORTED(__inst_arm(0xe75f8a3c) "   @ smmlar    pc, r12, r10, r8")
1025 
1026     TEST_RR(   "smmul   r0, r",0,  VAL1,", r",1, VAL2,"")
1027     TEST_RR(   "smmul   r14, r",12,VAL2,", r",10,VAL1,"")
1028     TEST_UNSUPPORTED(__inst_arm(0xe75ffa1c) "   @ smmul pc, r12, r10")
1029     TEST_RR(   "smmulr  r0, r",0,  VAL1,", r",1, VAL2,"")
1030     TEST_RR(   "smmulr  r14, r",12,VAL2,", r",10,VAL1,"")
1031     TEST_UNSUPPORTED(__inst_arm(0xe75ffa3c) "   @ smmulr    pc, r12, r10")
1032 
1033     TEST_RRR(  "smmls   r0, r",0,  VAL1,", r",1, VAL2,", r",2, VAL1,"")
1034     TEST_RRR(  "smmls   r14, r",12,VAL2,", r",10,VAL1,", r",8, VAL2,"")
1035     TEST_UNSUPPORTED(__inst_arm(0xe75f8adc) "   @ smmls pc, r12, r10, r8")
1036     TEST_RRR(  "smmlsr  r0, r",0,  VAL1,", r",1, VAL2,", r",2, VAL1,"")
1037     TEST_RRR(  "smmlsr  r14, r",12,VAL2,", r",10,VAL1,", r",8, VAL2,"")
1038     TEST_UNSUPPORTED(__inst_arm(0xe75f8afc) "   @ smmlsr    pc, r12, r10, r8")
1039     TEST_UNSUPPORTED(__inst_arm(0xe75e8aff) "   @ smmlsr    r14, pc, r10, r8")
1040     TEST_UNSUPPORTED(__inst_arm(0xe75e8ffc) "   @ smmlsr    r14, r12, pc, r8")
1041     TEST_UNSUPPORTED(__inst_arm(0xe75efafc) "   @ smmlsr    r14, r12, r10, pc")
1042 
1043     TEST_RR(   "usad8   r0, r",0,  VAL1,", r",1, VAL2,"")
1044     TEST_RR(   "usad8   r14, r",12,VAL2,", r",10,VAL1,"")
1045     TEST_UNSUPPORTED(__inst_arm(0xe75ffa1c) "   @ usad8 pc, r12, r10")
1046     TEST_UNSUPPORTED(__inst_arm(0xe75efa1f) "   @ usad8 r14, pc, r10")
1047     TEST_UNSUPPORTED(__inst_arm(0xe75eff1c) "   @ usad8 r14, r12, pc")
1048 
1049     TEST_RRR(  "usada8  r0, r",0,  VAL1,", r",1, VAL2,", r",2, VAL3,"")
1050     TEST_RRR(  "usada8  r14, r",12,VAL2,", r",10,VAL1,", r",8, VAL3,"")
1051     TEST_UNSUPPORTED(__inst_arm(0xe78f8a1c) "   @ usada8    pc, r12, r10, r8")
1052     TEST_UNSUPPORTED(__inst_arm(0xe78e8a1f) "   @ usada8    r14, pc, r10, r8")
1053     TEST_UNSUPPORTED(__inst_arm(0xe78e8f1c) "   @ usada8    r14, r12, pc, r8")
1054 #endif /* __LINUX_ARM_ARCH__ >= 6 */
1055 
1056 #if __LINUX_ARM_ARCH__ >= 7
1057     TEST_GROUP("Bit Field")
1058 
1059     TEST_R(     "sbfx   r0, r",0  , VAL1,", #0, #31")
1060     TEST_R(     "sbfxeq r14, r",12, VAL2,", #8, #16")
1061     TEST_R(     "sbfx   r4, r",10,  VAL1,", #16, #15")
1062     TEST_UNSUPPORTED(__inst_arm(0xe7aff45c) "   @ sbfx  pc, r12, #8, #16")
1063 
1064     TEST_R(     "ubfx   r0, r",0  , VAL1,", #0, #31")
1065     TEST_R(     "ubfxcs r14, r",12, VAL2,", #8, #16")
1066     TEST_R(     "ubfx   r4, r",10,  VAL1,", #16, #15")
1067     TEST_UNSUPPORTED(__inst_arm(0xe7eff45c) "   @ ubfx  pc, r12, #8, #16")
1068     TEST_UNSUPPORTED(__inst_arm(0xe7efc45f) "   @ ubfx  r12, pc, #8, #16")
1069 
1070     TEST_R(     "bfc    r",0, VAL1,", #4, #20")
1071     TEST_R(     "bfcvs  r",14,VAL2,", #4, #20")
1072     TEST_R(     "bfc    r",7, VAL1,", #0, #31")
1073     TEST_R(     "bfc    r",8, VAL2,", #0, #31")
1074     TEST_UNSUPPORTED(__inst_arm(0xe7def01f) "   @ bfc   pc, #0, #31");
1075 
1076     TEST_RR(    "bfi    r",0, VAL1,", r",0  , VAL2,", #0, #31")
1077     TEST_RR(    "bfipl  r",12,VAL1,", r",14 , VAL2,", #4, #20")
1078     TEST_UNSUPPORTED(__inst_arm(0xe7d7f21e) "   @ bfi   pc, r14, #4, #20")
1079 
1080     TEST_UNSUPPORTED(__inst_arm(0x07f000f0) "")  /* Permanently UNDEFINED */
1081     TEST_UNSUPPORTED(__inst_arm(0x07ffffff) "")  /* Permanently UNDEFINED */
1082 #endif /* __LINUX_ARM_ARCH__ >= 6 */
1083 
1084     TEST_GROUP("Branch, branch with link, and block data transfer")
1085 
1086     TEST_P(   "stmda    r",0, 16*4,", {r0}")
1087     TEST_P(   "stmdaeq  r",4, 16*4,", {r0-r15}")
1088     TEST_P(   "stmdane  r",8, 16*4,"!, {r8-r15}")
1089     TEST_P(   "stmda    r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
1090     TEST_P(   "stmda    r",13,0,   "!, {pc}")
1091 
1092     TEST_P(   "ldmda    r",0, 16*4,", {r0}")
1093     TEST_BF_P("ldmdacs  r",4, 15*4,", {r0-r15}")
1094     TEST_BF_P("ldmdacc  r",7, 15*4,"!, {r8-r15}")
1095     TEST_P(   "ldmda    r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
1096     TEST_BF_P("ldmda    r",14,15*4,"!, {pc}")
1097 
1098     TEST_P(   "stmia    r",0, 16*4,", {r0}")
1099     TEST_P(   "stmiami  r",4, 16*4,", {r0-r15}")
1100     TEST_P(   "stmiapl  r",8, 16*4,"!, {r8-r15}")
1101     TEST_P(   "stmia    r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
1102     TEST_P(   "stmia    r",14,0,   "!, {pc}")
1103 
1104     TEST_P(   "ldmia    r",0, 16*4,", {r0}")
1105     TEST_BF_P("ldmiavs  r",4, 0,   ", {r0-r15}")
1106     TEST_BF_P("ldmiavc  r",7, 8*4, "!, {r8-r15}")
1107     TEST_P(   "ldmia    r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
1108     TEST_BF_P("ldmia    r",14,15*4,"!, {pc}")
1109 
1110     TEST_P(   "stmdb    r",0, 16*4,", {r0}")
1111     TEST_P(   "stmdbhi  r",4, 16*4,", {r0-r15}")
1112     TEST_P(   "stmdbls  r",8, 16*4,"!, {r8-r15}")
1113     TEST_P(   "stmdb    r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
1114     TEST_P(   "stmdb    r",13,4,   "!, {pc}")
1115 
1116     TEST_P(   "ldmdb    r",0, 16*4,", {r0}")
1117     TEST_BF_P("ldmdbge  r",4, 16*4,", {r0-r15}")
1118     TEST_BF_P("ldmdblt  r",7, 16*4,"!, {r8-r15}")
1119     TEST_P(   "ldmdb    r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
1120     TEST_BF_P("ldmdb    r",14,16*4,"!, {pc}")
1121 
1122     TEST_P(   "stmib    r",0, 16*4,", {r0}")
1123     TEST_P(   "stmibgt  r",4, 16*4,", {r0-r15}")
1124     TEST_P(   "stmible  r",8, 16*4,"!, {r8-r15}")
1125     TEST_P(   "stmib    r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
1126     TEST_P(   "stmib    r",13,-4,  "!, {pc}")
1127 
1128     TEST_P(   "ldmib    r",0, 16*4,", {r0}")
1129     TEST_BF_P("ldmibeq  r",4, -4,", {r0-r15}")
1130     TEST_BF_P("ldmibne  r",7, 7*4,"!, {r8-r15}")
1131     TEST_P(   "ldmib    r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
1132     TEST_BF_P("ldmib    r",14,14*4,"!, {pc}")
1133 
1134     TEST_P(   "stmdb    r",13,16*4,"!, {r3-r12,lr}")
1135     TEST_P(   "stmdbeq  r",13,16*4,"!, {r3-r12}")
1136     TEST_P(   "stmdbne  r",2, 16*4,", {r3-r12,lr}")
1137     TEST_P(   "stmdb    r",13,16*4,"!, {r2-r12,lr}")
1138     TEST_P(   "stmdb    r",0, 16*4,", {r0-r12}")
1139     TEST_P(   "stmdb    r",0, 16*4,", {r0-r12,lr}")
1140 
1141     TEST_BF_P("ldmia    r",13,5*4, "!, {r3-r12,pc}")
1142     TEST_P(   "ldmiacc  r",13,5*4, "!, {r3-r12}")
1143     TEST_BF_P("ldmiacs  r",2, 5*4, "!, {r3-r12,pc}")
1144     TEST_BF_P("ldmia    r",13,4*4, "!, {r2-r12,pc}")
1145     TEST_P(   "ldmia    r",0, 16*4,", {r0-r12}")
1146     TEST_P(   "ldmia    r",0, 16*4,", {r0-r12,lr}")
1147 
1148 #ifdef CONFIG_THUMB2_KERNEL
1149     TEST_ARM_TO_THUMB_INTERWORK_P("ldmplia  r",0,15*4,", {pc}")
1150     TEST_ARM_TO_THUMB_INTERWORK_P("ldmmiia  r",13,0,", {r0-r15}")
1151 #endif
1152     TEST_BF("b  2f")
1153     TEST_BF("bl 2f")
1154     TEST_BB("b  2b")
1155     TEST_BB("bl 2b")
1156 
1157     TEST_BF("beq    2f")
1158     TEST_BF("bleq   2f")
1159     TEST_BB("bne    2b")
1160     TEST_BB("blne   2b")
1161 
1162     TEST_BF("bgt    2f")
1163     TEST_BF("blgt   2f")
1164     TEST_BB("blt    2b")
1165     TEST_BB("bllt   2b")
1166 
1167     TEST_GROUP("Supervisor Call, and coprocessor instructions")
1168 
1169     /*
1170      * We can't really test these by executing them, so all
1171      * we can do is check that probes are, or are not allowed.
1172      * At the moment none are allowed...
1173      */
1174 #define TEST_COPROCESSOR(code) TEST_UNSUPPORTED(code)
1175 
1176 #define COPROCESSOR_INSTRUCTIONS_ST_LD(two,cc)                  \
1177     TEST_COPROCESSOR("stc"two"  p0, cr0, [r13, #4]")            \
1178     TEST_COPROCESSOR("stc"two"  p0, cr0, [r13, #-4]")           \
1179     TEST_COPROCESSOR("stc"two"  p0, cr0, [r13, #4]!")           \
1180     TEST_COPROCESSOR("stc"two"  p0, cr0, [r13, #-4]!")          \
1181     TEST_COPROCESSOR("stc"two"  p0, cr0, [r13], #4")            \
1182     TEST_COPROCESSOR("stc"two"  p0, cr0, [r13], #-4")           \
1183     TEST_COPROCESSOR("stc"two"  p0, cr0, [r13], {1}")           \
1184     TEST_COPROCESSOR("stc"two"l p0, cr0, [r13, #4]")            \
1185     TEST_COPROCESSOR("stc"two"l p0, cr0, [r13, #-4]")           \
1186     TEST_COPROCESSOR("stc"two"l p0, cr0, [r13, #4]!")           \
1187     TEST_COPROCESSOR("stc"two"l p0, cr0, [r13, #-4]!")          \
1188     TEST_COPROCESSOR("stc"two"l p0, cr0, [r13], #4")            \
1189     TEST_COPROCESSOR("stc"two"l p0, cr0, [r13], #-4")           \
1190     TEST_COPROCESSOR("stc"two"l p0, cr0, [r13], {1}")           \
1191     TEST_COPROCESSOR("ldc"two"  p0, cr0, [r13, #4]")            \
1192     TEST_COPROCESSOR("ldc"two"  p0, cr0, [r13, #-4]")           \
1193     TEST_COPROCESSOR("ldc"two"  p0, cr0, [r13, #4]!")           \
1194     TEST_COPROCESSOR("ldc"two"  p0, cr0, [r13, #-4]!")          \
1195     TEST_COPROCESSOR("ldc"two"  p0, cr0, [r13], #4")            \
1196     TEST_COPROCESSOR("ldc"two"  p0, cr0, [r13], #-4")           \
1197     TEST_COPROCESSOR("ldc"two"  p0, cr0, [r13], {1}")           \
1198     TEST_COPROCESSOR("ldc"two"l p0, cr0, [r13, #4]")            \
1199     TEST_COPROCESSOR("ldc"two"l p0, cr0, [r13, #-4]")           \
1200     TEST_COPROCESSOR("ldc"two"l p0, cr0, [r13, #4]!")           \
1201     TEST_COPROCESSOR("ldc"two"l p0, cr0, [r13, #-4]!")          \
1202     TEST_COPROCESSOR("ldc"two"l p0, cr0, [r13], #4")            \
1203     TEST_COPROCESSOR("ldc"two"l p0, cr0, [r13], #-4")           \
1204     TEST_COPROCESSOR("ldc"two"l p0, cr0, [r13], {1}")           \
1205                                         \
1206     TEST_COPROCESSOR( "stc"two" p0, cr0, [r15, #4]")            \
1207     TEST_COPROCESSOR( "stc"two" p0, cr0, [r15, #-4]")           \
1208     TEST_UNSUPPORTED(__inst_arm(0x##cc##daf0001) "  @ stc"two"  0, cr0, [r15, #4]!")    \
1209     TEST_UNSUPPORTED(__inst_arm(0x##cc##d2f0001) "  @ stc"two"  0, cr0, [r15, #-4]!")   \
1210     TEST_UNSUPPORTED(__inst_arm(0x##cc##caf0001) "  @ stc"two"  0, cr0, [r15], #4") \
1211     TEST_UNSUPPORTED(__inst_arm(0x##cc##c2f0001) "  @ stc"two"  0, cr0, [r15], #-4")    \
1212     TEST_COPROCESSOR( "stc"two" p0, cr0, [r15], {1}")           \
1213     TEST_COPROCESSOR( "stc"two"l    p0, cr0, [r15, #4]")            \
1214     TEST_COPROCESSOR( "stc"two"l    p0, cr0, [r15, #-4]")           \
1215     TEST_UNSUPPORTED(__inst_arm(0x##cc##def0001) "  @ stc"two"l 0, cr0, [r15, #4]!")    \
1216     TEST_UNSUPPORTED(__inst_arm(0x##cc##d6f0001) "  @ stc"two"l 0, cr0, [r15, #-4]!")   \
1217     TEST_UNSUPPORTED(__inst_arm(0x##cc##cef0001) "  @ stc"two"l 0, cr0, [r15], #4") \
1218     TEST_UNSUPPORTED(__inst_arm(0x##cc##c6f0001) "  @ stc"two"l 0, cr0, [r15], #-4")    \
1219     TEST_COPROCESSOR( "stc"two"l    p0, cr0, [r15], {1}")           \
1220     TEST_COPROCESSOR( "ldc"two" p0, cr0, [r15, #4]")            \
1221     TEST_COPROCESSOR( "ldc"two" p0, cr0, [r15, #-4]")           \
1222     TEST_UNSUPPORTED(__inst_arm(0x##cc##dbf0001) "  @ ldc"two"  0, cr0, [r15, #4]!")    \
1223     TEST_UNSUPPORTED(__inst_arm(0x##cc##d3f0001) "  @ ldc"two"  0, cr0, [r15, #-4]!")   \
1224     TEST_UNSUPPORTED(__inst_arm(0x##cc##cbf0001) "  @ ldc"two"  0, cr0, [r15], #4") \
1225     TEST_UNSUPPORTED(__inst_arm(0x##cc##c3f0001) "  @ ldc"two"  0, cr0, [r15], #-4")    \
1226     TEST_COPROCESSOR( "ldc"two" p0, cr0, [r15], {1}")           \
1227     TEST_COPROCESSOR( "ldc"two"l    p0, cr0, [r15, #4]")            \
1228     TEST_COPROCESSOR( "ldc"two"l    p0, cr0, [r15, #-4]")           \
1229     TEST_UNSUPPORTED(__inst_arm(0x##cc##dff0001) "  @ ldc"two"l 0, cr0, [r15, #4]!")    \
1230     TEST_UNSUPPORTED(__inst_arm(0x##cc##d7f0001) "  @ ldc"two"l 0, cr0, [r15, #-4]!")   \
1231     TEST_UNSUPPORTED(__inst_arm(0x##cc##cff0001) "  @ ldc"two"l 0, cr0, [r15], #4") \
1232     TEST_UNSUPPORTED(__inst_arm(0x##cc##c7f0001) "  @ ldc"two"l 0, cr0, [r15], #-4")    \
1233     TEST_COPROCESSOR( "ldc"two"l    p0, cr0, [r15], {1}")
1234 
1235 #define COPROCESSOR_INSTRUCTIONS_MC_MR(two,cc)                  \
1236                                         \
1237     TEST_COPROCESSOR( "mcrr"two"    p0, 15, r0, r14, cr0")          \
1238     TEST_COPROCESSOR( "mcrr"two"    p15, 0, r14, r0, cr15")         \
1239     TEST_UNSUPPORTED(__inst_arm(0x##cc##c4f00f0) "  @ mcrr"two" 0, 15, r0, r15, cr0")   \
1240     TEST_UNSUPPORTED(__inst_arm(0x##cc##c40ff0f) "  @ mcrr"two" 15, 0, r15, r0, cr15")  \
1241     TEST_COPROCESSOR( "mrrc"two"    p0, 15, r0, r14, cr0")          \
1242     TEST_COPROCESSOR( "mrrc"two"    p15, 0, r14, r0, cr15")         \
1243     TEST_UNSUPPORTED(__inst_arm(0x##cc##c5f00f0) "  @ mrrc"two" 0, 15, r0, r15, cr0")   \
1244     TEST_UNSUPPORTED(__inst_arm(0x##cc##c50ff0f) "  @ mrrc"two" 15, 0, r15, r0, cr15")  \
1245     TEST_COPROCESSOR( "cdp"two" p15, 15, cr15, cr15, cr15, 7")      \
1246     TEST_COPROCESSOR( "cdp"two" p0, 0, cr0, cr0, cr0, 0")       \
1247     TEST_COPROCESSOR( "mcr"two" p15, 7, r15, cr15, cr15, 7")        \
1248     TEST_COPROCESSOR( "mcr"two" p0, 0, r0, cr0, cr0, 0")        \
1249     TEST_COPROCESSOR( "mrc"two" p15, 7, r14, cr15, cr15, 7")        \
1250     TEST_COPROCESSOR( "mrc"two" p0, 0, r0, cr0, cr0, 0")
1251 
1252     COPROCESSOR_INSTRUCTIONS_ST_LD("",e)
1253 #if __LINUX_ARM_ARCH__ >= 5
1254     COPROCESSOR_INSTRUCTIONS_MC_MR("",e)
1255 #endif
1256     TEST_UNSUPPORTED("svc   0")
1257     TEST_UNSUPPORTED("svc   0xffffff")
1258 
1259     TEST_UNSUPPORTED("svc   0")
1260 
1261     TEST_GROUP("Unconditional instruction")
1262 
1263 #if __LINUX_ARM_ARCH__ >= 6
1264     TEST_UNSUPPORTED("srsda sp, 0x13")
1265     TEST_UNSUPPORTED("srsdb sp, 0x13")
1266     TEST_UNSUPPORTED("srsia sp, 0x13")
1267     TEST_UNSUPPORTED("srsib sp, 0x13")
1268     TEST_UNSUPPORTED("srsda sp!, 0x13")
1269     TEST_UNSUPPORTED("srsdb sp!, 0x13")
1270     TEST_UNSUPPORTED("srsia sp!, 0x13")
1271     TEST_UNSUPPORTED("srsib sp!, 0x13")
1272 
1273     TEST_UNSUPPORTED("rfeda sp")
1274     TEST_UNSUPPORTED("rfedb sp")
1275     TEST_UNSUPPORTED("rfeia sp")
1276     TEST_UNSUPPORTED("rfeib sp")
1277     TEST_UNSUPPORTED("rfeda sp!")
1278     TEST_UNSUPPORTED("rfedb sp!")
1279     TEST_UNSUPPORTED("rfeia sp!")
1280     TEST_UNSUPPORTED("rfeib sp!")
1281     TEST_UNSUPPORTED(__inst_arm(0xf81d0a00) "   @ rfeda pc")
1282     TEST_UNSUPPORTED(__inst_arm(0xf91d0a00) "   @ rfedb pc")
1283     TEST_UNSUPPORTED(__inst_arm(0xf89d0a00) "   @ rfeia pc")
1284     TEST_UNSUPPORTED(__inst_arm(0xf99d0a00) "   @ rfeib pc")
1285     TEST_UNSUPPORTED(__inst_arm(0xf83d0a00) "   @ rfeda pc!")
1286     TEST_UNSUPPORTED(__inst_arm(0xf93d0a00) "   @ rfedb pc!")
1287     TEST_UNSUPPORTED(__inst_arm(0xf8bd0a00) "   @ rfeia pc!")
1288     TEST_UNSUPPORTED(__inst_arm(0xf9bd0a00) "   @ rfeib pc!")
1289 #endif /* __LINUX_ARM_ARCH__ >= 6 */
1290 
1291 #if __LINUX_ARM_ARCH__ >= 6
1292     TEST_X( "blx    __dummy_thumb_subroutine_even",
1293         ".thumb             \n\t"
1294         ".space 4           \n\t"
1295         ".type __dummy_thumb_subroutine_even, %%function \n\t"
1296         "__dummy_thumb_subroutine_even: \n\t"
1297         "mov    r0, pc          \n\t"
1298         "bx lr          \n\t"
1299         ".arm               \n\t"
1300     )
1301     TEST(   "blx    __dummy_thumb_subroutine_even")
1302 
1303     TEST_X( "blx    __dummy_thumb_subroutine_odd",
1304         ".thumb             \n\t"
1305         ".space 2           \n\t"
1306         ".type __dummy_thumb_subroutine_odd, %%function \n\t"
1307         "__dummy_thumb_subroutine_odd:  \n\t"
1308         "mov    r0, pc          \n\t"
1309         "bx lr          \n\t"
1310         ".arm               \n\t"
1311     )
1312     TEST(   "blx    __dummy_thumb_subroutine_odd")
1313 #endif /* __LINUX_ARM_ARCH__ >= 6 */
1314 
1315 #if __LINUX_ARM_ARCH__ >= 5
1316     COPROCESSOR_INSTRUCTIONS_ST_LD("2",f)
1317 #endif
1318 #if __LINUX_ARM_ARCH__ >= 6
1319     COPROCESSOR_INSTRUCTIONS_MC_MR("2",f)
1320 #endif
1321 
1322     TEST_GROUP("Miscellaneous instructions, memory hints, and Advanced SIMD instructions")
1323 
1324 #if __LINUX_ARM_ARCH__ >= 6
1325     TEST_UNSUPPORTED("cps   0x13")
1326     TEST_UNSUPPORTED("cpsie i")
1327     TEST_UNSUPPORTED("cpsid i")
1328     TEST_UNSUPPORTED("cpsie i,0x13")
1329     TEST_UNSUPPORTED("cpsid i,0x13")
1330     TEST_UNSUPPORTED("setend    le")
1331     TEST_UNSUPPORTED("setend    be")
1332 #endif
1333 
1334 #if __LINUX_ARM_ARCH__ >= 7
1335     TEST_P("pli [r",0,0b,", #16]")
1336     TEST(  "pli [pc, #0]")
1337     TEST_RR("pli    [r",12,0b,", r",0, 16,"]")
1338     TEST_RR("pli    [r",0, 0b,", -r",12,16,", lsl #4]")
1339 #endif
1340 
1341 #if __LINUX_ARM_ARCH__ >= 5
1342     TEST_P("pld [r",0,32,", #-16]")
1343     TEST(  "pld [pc, #0]")
1344     TEST_PR("pld    [r",7, 24, ", r",0, 16,"]")
1345     TEST_PR("pld    [r",8, 24, ", -r",12,16,", lsl #4]")
1346 #endif
1347 
1348 #if __LINUX_ARM_ARCH__ >= 7
1349     TEST_SUPPORTED(  __inst_arm(0xf590f000) "   @ pldw [r0, #0]")
1350     TEST_SUPPORTED(  __inst_arm(0xf797f000) "   @ pldw  [r7, r0]")
1351     TEST_SUPPORTED(  __inst_arm(0xf798f18c) "   @ pldw  [r8, r12, lsl #3]");
1352 #endif
1353 
1354 #if __LINUX_ARM_ARCH__ >= 7
1355     TEST_UNSUPPORTED("clrex")
1356     TEST_UNSUPPORTED("dsb")
1357     TEST_UNSUPPORTED("dmb")
1358     TEST_UNSUPPORTED("isb")
1359 #endif
1360 
1361     verbose("\n");
1362 }
1363