0001
0002
0003
0004
0005
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")
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
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
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
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
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")
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))
0461 TEST_UNSUPPORTED(__inst_arm(0xe1200090))
0462 TEST_UNSUPPORTED(__inst_arm(0xe1300090))
0463 TEST_UNSUPPORTED(__inst_arm(0xe1500090))
0464 TEST_UNSUPPORTED(__inst_arm(0xe1600090))
0465 TEST_UNSUPPORTED(__inst_arm(0xe1700090))
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) "")
0728 TEST_UNSUPPORTED(__inst_arm(0xe60fffff) "")
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) "")
0746 TEST_UNSUPPORTED(__inst_arm(0xe61fffbf) "")
0747 TEST_UNSUPPORTED(__inst_arm(0xe61000d0) "")
0748 TEST_UNSUPPORTED(__inst_arm(0xe61fffdf) "")
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) "")
0769 TEST_UNSUPPORTED(__inst_arm(0xe62fffbf) "")
0770 TEST_UNSUPPORTED(__inst_arm(0xe62000d0) "")
0771 TEST_UNSUPPORTED(__inst_arm(0xe62fffdf) "")
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) "")
0792 TEST_UNSUPPORTED(__inst_arm(0xe63fffbf) "")
0793 TEST_UNSUPPORTED(__inst_arm(0xe63000d0) "")
0794 TEST_UNSUPPORTED(__inst_arm(0xe63fffdf) "")
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) "")
0802 TEST_UNSUPPORTED(__inst_arm(0xe64fffff) "")
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) "")
0820 TEST_UNSUPPORTED(__inst_arm(0xe65fffbf) "")
0821 TEST_UNSUPPORTED(__inst_arm(0xe65000d0) "")
0822 TEST_UNSUPPORTED(__inst_arm(0xe65fffdf) "")
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) "")
0843 TEST_UNSUPPORTED(__inst_arm(0xe66fffbf) "")
0844 TEST_UNSUPPORTED(__inst_arm(0xe66000d0) "")
0845 TEST_UNSUPPORTED(__inst_arm(0xe66fffdf) "")
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) "")
0866 TEST_UNSUPPORTED(__inst_arm(0xe67fffbf) "")
0867 TEST_UNSUPPORTED(__inst_arm(0xe67000d0) "")
0868 TEST_UNSUPPORTED(__inst_arm(0xe67fffdf) "")
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
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) "")
0888 TEST_UNSUPPORTED(__inst_arm(0xe69fffdf) "")
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) "")
0970 TEST_UNSUPPORTED(__inst_arm(0xe69fff7f) "")
0971
0972 TEST_UNSUPPORTED(__inst_arm(0xe6d00070) "")
0973 TEST_UNSUPPORTED(__inst_arm(0xe6dfff7f) "")
0974 #endif
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
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) "")
1081 TEST_UNSUPPORTED(__inst_arm(0x07ffffff) "")
1082 #endif
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
1171
1172
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
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
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