linux/arch/arm/kernel/kprobes-test-arm.c
<<
>>
Prefs
   1/*
   2 * arch/arm/kernel/kprobes-test-arm.c
   3 *
   4 * Copyright (C) 2011 Jon Medhurst <tixy@yxit.co.uk>.
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 */
  10
  11#include <linux/kernel.h>
  12#include <linux/module.h>
  13
  14#include "kprobes-test.h"
  15
  16
  17#define TEST_ISA "32"
  18
  19#define TEST_ARM_TO_THUMB_INTERWORK_R(code1, reg, val, code2)   \
  20        TESTCASE_START(code1 #reg code2)                        \
  21        TEST_ARG_REG(reg, val)                                  \
  22        TEST_ARG_REG(14, 99f)                                   \
  23        TEST_ARG_END("")                                        \
  24        "50:    nop                     \n\t"                   \
  25        "1:     "code1 #reg code2"      \n\t"                   \
  26        "       bx      lr              \n\t"                   \
  27        ".thumb                         \n\t"                   \
  28        "3:     adr     lr, 2f          \n\t"                   \
  29        "       bx      lr              \n\t"                   \
  30        ".arm                           \n\t"                   \
  31        "2:     nop                     \n\t"                   \
  32        TESTCASE_END
  33
  34#define TEST_ARM_TO_THUMB_INTERWORK_P(code1, reg, val, code2)   \
  35        TESTCASE_START(code1 #reg code2)                        \
  36        TEST_ARG_PTR(reg, val)                                  \
  37        TEST_ARG_REG(14, 99f)                                   \
  38        TEST_ARG_MEM(15, 3f+1)                                  \
  39        TEST_ARG_END("")                                        \
  40        "50:    nop                     \n\t"                   \
  41        "1:     "code1 #reg code2"      \n\t"                   \
  42        "       bx      lr              \n\t"                   \
  43        ".thumb                         \n\t"                   \
  44        "3:     adr     lr, 2f          \n\t"                   \
  45        "       bx      lr              \n\t"                   \
  46        ".arm                           \n\t"                   \
  47        "2:     nop                     \n\t"                   \
  48        TESTCASE_END
  49
  50
  51void kprobe_arm_test_cases(void)
  52{
  53        kprobe_test_flags = 0;
  54
  55        TEST_GROUP("Data-processing (register), (register-shifted register), (immediate)")
  56
  57#define _DATA_PROCESSING_DNM(op,s,val)                                          \
  58        TEST_RR(  op "eq" s "   r0,  r",1, VAL1,", r",2, val, "")               \
  59        TEST_RR(  op "ne" s "   r1,  r",1, VAL1,", r",2, val, ", lsl #3")       \
  60        TEST_RR(  op "cs" s "   r2,  r",3, VAL1,", r",2, val, ", lsr #4")       \
  61        TEST_RR(  op "cc" s "   r3,  r",3, VAL1,", r",2, val, ", asr #5")       \
  62        TEST_RR(  op "mi" s "   r4,  r",5, VAL1,", r",2, N(val),", asr #6")     \
  63        TEST_RR(  op "pl" s "   r5,  r",5, VAL1,", r",2, val, ", ror #7")       \
  64        TEST_RR(  op "vs" s "   r6,  r",7, VAL1,", r",2, val, ", rrx")          \
  65        TEST_R(   op "vc" s "   r6,  r",7, VAL1,", pc, lsl #3")                 \
  66        TEST_R(   op "vc" s "   r6,  r",7, VAL1,", sp, lsr #4")                 \
  67        TEST_R(   op "vc" s "   r6,  pc, r",7, VAL1,", asr #5")                 \
  68        TEST_R(   op "vc" s "   r6,  sp, r",7, VAL1,", ror #6")                 \
  69        TEST_RRR( op "hi" s "   r8,  r",9, VAL1,", r",14,val, ", lsl r",0, 3,"")\
  70        TEST_RRR( op "ls" s "   r9,  r",9, VAL1,", r",14,val, ", lsr r",7, 4,"")\
  71        TEST_RRR( op "ge" s "   r10, r",11,VAL1,", r",14,val, ", asr r",7, 5,"")\
  72        TEST_RRR( op "lt" s "   r11, r",11,VAL1,", r",14,N(val),", asr r",7, 6,"")\
  73        TEST_RR(  op "gt" s "   r12, r13"       ", r",14,val, ", ror r",14,7,"")\
  74        TEST_RR(  op "le" s "   r14, r",0, val, ", r13"       ", lsl r",14,8,"")\
  75        TEST_RR(  op s "        r12, pc"        ", r",14,val, ", ror r",14,7,"")\
  76        TEST_RR(  op s "        r14, r",0, val, ", pc"        ", lsl r",14,8,"")\
  77        TEST_R(   op "eq" s "   r0,  r",11,VAL1,", #0xf5")                      \
  78        TEST_R(   op "ne" s "   r11, r",0, VAL1,", #0xf5000000")                \
  79        TEST_R(   op s "        r7,  r",8, VAL2,", #0x000af000")                \
  80        TEST(     op s "        r4,  pc"        ", #0x00005a00")
  81
  82#define DATA_PROCESSING_DNM(op,val)             \
  83        _DATA_PROCESSING_DNM(op,"",val)         \
  84        _DATA_PROCESSING_DNM(op,"s",val)
  85
  86#define DATA_PROCESSING_NM(op,val)                                              \
  87        TEST_RR(  op "ne        r",1, VAL1,", r",2, val, "")                    \
  88        TEST_RR(  op "eq        r",1, VAL1,", r",2, val, ", lsl #3")            \
  89        TEST_RR(  op "cc        r",3, VAL1,", r",2, val, ", lsr #4")            \
  90        TEST_RR(  op "cs        r",3, VAL1,", r",2, val, ", asr #5")            \
  91        TEST_RR(  op "pl        r",5, VAL1,", r",2, N(val),", asr #6")          \
  92        TEST_RR(  op "mi        r",5, VAL1,", r",2, val, ", ror #7")            \
  93        TEST_RR(  op "vc        r",7, VAL1,", r",2, val, ", rrx")               \
  94        TEST_R (  op "vs        r",7, VAL1,", pc, lsl #3")                      \
  95        TEST_R (  op "vs        r",7, VAL1,", sp, lsr #4")                      \
  96        TEST_R(   op "vs        pc, r",7, VAL1,", asr #5")                      \
  97        TEST_R(   op "vs        sp, r",7, VAL1,", ror #6")                      \
  98        TEST_RRR( op "ls        r",9, VAL1,", r",14,val, ", lsl r",0, 3,"")     \
  99        TEST_RRR( op "hi        r",9, VAL1,", r",14,val, ", lsr r",7, 4,"")     \
 100        TEST_RRR( op "lt        r",11,VAL1,", r",14,val, ", asr r",7, 5,"")     \
 101        TEST_RRR( op "ge        r",11,VAL1,", r",14,N(val),", asr r",7, 6,"")   \
 102        TEST_RR(  op "le        r13"       ", r",14,val, ", ror r",14,7,"")     \
 103        TEST_RR(  op "gt        r",0, val, ", r13"       ", lsl r",14,8,"")     \
 104        TEST_RR(  op "  pc"        ", r",14,val, ", ror r",14,7,"")             \
 105        TEST_RR(  op "  r",0, val, ", pc"        ", lsl r",14,8,"")             \
 106        TEST_R(   op "eq        r",11,VAL1,", #0xf5")                           \
 107        TEST_R(   op "ne        r",0, VAL1,", #0xf5000000")                     \
 108        TEST_R(   op "  r",8, VAL2,", #0x000af000")
 109
 110#define _DATA_PROCESSING_DM(op,s,val)                                   \
 111        TEST_R(   op "eq" s "   r0,  r",1, val, "")                     \
 112        TEST_R(   op "ne" s "   r1,  r",1, val, ", lsl #3")             \
 113        TEST_R(   op "cs" s "   r2,  r",3, val, ", lsr #4")             \
 114        TEST_R(   op "cc" s "   r3,  r",3, val, ", asr #5")             \
 115        TEST_R(   op "mi" s "   r4,  r",5, N(val),", asr #6")           \
 116        TEST_R(   op "pl" s "   r5,  r",5, val, ", ror #7")             \
 117        TEST_R(   op "vs" s "   r6,  r",10,val, ", rrx")                \
 118        TEST(     op "vs" s "   r7,  pc, lsl #3")                       \
 119        TEST(     op "vs" s "   r7,  sp, lsr #4")                       \
 120        TEST_RR(  op "vc" s "   r8,  r",7, val, ", lsl r",0, 3,"")      \
 121        TEST_RR(  op "hi" s "   r9,  r",9, val, ", lsr r",7, 4,"")      \
 122        TEST_RR(  op "ls" s "   r10, r",9, val, ", asr r",7, 5,"")      \
 123        TEST_RR(  op "ge" s "   r11, r",11,N(val),", asr r",7, 6,"")    \
 124        TEST_RR(  op "lt" s "   r12, r",11,val, ", ror r",14,7,"")      \
 125        TEST_R(   op "gt" s "   r14, r13"       ", lsl r",14,8,"")      \
 126        TEST_R(   op "le" s "   r14, pc"        ", lsl r",14,8,"")      \
 127        TEST(     op "eq" s "   r0,  #0xf5")                            \
 128        TEST(     op "ne" s "   r11, #0xf5000000")                      \
 129        TEST(     op s "        r7,  #0x000af000")                      \
 130        TEST(     op s "        r4,  #0x00005a00")
 131
 132#define DATA_PROCESSING_DM(op,val)              \
 133        _DATA_PROCESSING_DM(op,"",val)          \
 134        _DATA_PROCESSING_DM(op,"s",val)
 135
 136        DATA_PROCESSING_DNM("and",0xf00f00ff)
 137        DATA_PROCESSING_DNM("eor",0xf00f00ff)
 138        DATA_PROCESSING_DNM("sub",VAL2)
 139        DATA_PROCESSING_DNM("rsb",VAL2)
 140        DATA_PROCESSING_DNM("add",VAL2)
 141        DATA_PROCESSING_DNM("adc",VAL2)
 142        DATA_PROCESSING_DNM("sbc",VAL2)
 143        DATA_PROCESSING_DNM("rsc",VAL2)
 144        DATA_PROCESSING_NM("tst",0xf00f00ff)
 145        DATA_PROCESSING_NM("teq",0xf00f00ff)
 146        DATA_PROCESSING_NM("cmp",VAL2)
 147        DATA_PROCESSING_NM("cmn",VAL2)
 148        DATA_PROCESSING_DNM("orr",0xf00f00ff)
 149        DATA_PROCESSING_DM("mov",VAL2)
 150        DATA_PROCESSING_DNM("bic",0xf00f00ff)
 151        DATA_PROCESSING_DM("mvn",VAL2)
 152
 153        TEST("mov       ip, sp") /* This has special case emulation code */
 154
 155        TEST_SUPPORTED("mov     pc, #0x1000");
 156        TEST_SUPPORTED("mov     sp, #0x1000");
 157        TEST_SUPPORTED("cmp     pc, #0x1000");
 158        TEST_SUPPORTED("cmp     sp, #0x1000");
 159
 160        /* Data-processing with PC as shift*/
 161        TEST_UNSUPPORTED(".word 0xe15c0f1e      @ cmp   r12, r14, asl pc")
 162        TEST_UNSUPPORTED(".word 0xe1a0cf1e      @ mov   r12, r14, asl pc")
 163        TEST_UNSUPPORTED(".word 0xe08caf1e      @ add   r10, r12, r14, asl pc")
 164
 165        /* Data-processing with PC as shift*/
 166        TEST_UNSUPPORTED("movs  pc, r1")
 167        TEST_UNSUPPORTED("movs  pc, r1, lsl r2")
 168        TEST_UNSUPPORTED("movs  pc, #0x10000")
 169        TEST_UNSUPPORTED("adds  pc, lr, r1")
 170        TEST_UNSUPPORTED("adds  pc, lr, r1, lsl r2")
 171        TEST_UNSUPPORTED("adds  pc, lr, #4")
 172
 173        /* Data-processing with SP as target */
 174        TEST("add       sp, sp, #16")
 175        TEST("sub       sp, sp, #8")
 176        TEST("bic       sp, sp, #0x20")
 177        TEST("orr       sp, sp, #0x20")
 178        TEST_PR( "add   sp, r",10,0,", r",11,4,"")
 179        TEST_PRR("add   sp, r",10,0,", r",11,4,", asl r",12,1,"")
 180        TEST_P(  "mov   sp, r",10,0,"")
 181        TEST_PR( "mov   sp, r",10,0,", asl r",12,0,"")
 182
 183        /* Data-processing with PC as target */
 184        TEST_BF(   "add pc, pc, #2f-1b-8")
 185        TEST_BF_R ("add pc, pc, r",14,2f-1f-8,"")
 186        TEST_BF_R ("add pc, r",14,2f-1f-8,", pc")
 187        TEST_BF_R ("mov pc, r",0,2f,"")
 188        TEST_BF_RR("mov pc, r",0,2f,", asl r",1,0,"")
 189        TEST_BB(   "sub pc, pc, #1b-2b+8")
 190#if __LINUX_ARM_ARCH__ == 6 && !defined(CONFIG_CPU_V7)
 191        TEST_BB(   "sub pc, pc, #1b-2b+8-2") /* UNPREDICTABLE before and after ARMv6 */
 192#endif
 193        TEST_BB_R( "sub pc, pc, r",14, 1f-2f+8,"")
 194        TEST_BB_R( "rsb pc, r",14,1f-2f+8,", pc")
 195        TEST_RR(   "add pc, pc, r",10,-2,", asl r",11,1,"")
 196#ifdef CONFIG_THUMB2_KERNEL
 197        TEST_ARM_TO_THUMB_INTERWORK_R("add      pc, pc, r",0,3f-1f-8+1,"")
 198        TEST_ARM_TO_THUMB_INTERWORK_R("sub      pc, r",0,3f+8+1,", #8")
 199#endif
 200        TEST_GROUP("Miscellaneous instructions")
 201
 202        TEST("mrs       r0, cpsr")
 203        TEST("mrspl     r7, cpsr")
 204        TEST("mrs       r14, cpsr")
 205        TEST_UNSUPPORTED(".word 0xe10ff000      @ mrs r15, cpsr")
 206        TEST_UNSUPPORTED("mrs   r0, spsr")
 207        TEST_UNSUPPORTED("mrs   lr, spsr")
 208
 209        TEST_UNSUPPORTED("msr   cpsr, r0")
 210        TEST_UNSUPPORTED("msr   cpsr_f, lr")
 211        TEST_UNSUPPORTED("msr   spsr, r0")
 212
 213        TEST_BF_R("bx   r",0,2f,"")
 214        TEST_BB_R("bx   r",7,2f,"")
 215        TEST_BF_R("bxeq r",14,2f,"")
 216
 217        TEST_R("clz     r0, r",0, 0x0,"")
 218        TEST_R("clzeq   r7, r",14,0x1,"")
 219        TEST_R("clz     lr, r",7, 0xffffffff,"")
 220        TEST(  "clz     r4, sp")
 221        TEST_UNSUPPORTED(".word 0x016fff10      @ clz pc, r0")
 222        TEST_UNSUPPORTED(".word 0x016f0f1f      @ clz r0, pc")
 223
 224#if __LINUX_ARM_ARCH__ >= 6
 225        TEST_UNSUPPORTED("bxj   r0")
 226#endif
 227
 228        TEST_BF_R("blx  r",0,2f,"")
 229        TEST_BB_R("blx  r",7,2f,"")
 230        TEST_BF_R("blxeq        r",14,2f,"")
 231        TEST_UNSUPPORTED(".word 0x0120003f      @ blx pc")
 232
 233        TEST_RR(   "qadd        r0, r",1, VAL1,", r",2, VAL2,"")
 234        TEST_RR(   "qaddvs      lr, r",9, VAL2,", r",8, VAL1,"")
 235        TEST_R(    "qadd        lr, r",9, VAL2,", r13")
 236        TEST_RR(   "qsub        r0, r",1, VAL1,", r",2, VAL2,"")
 237        TEST_RR(   "qsubvs      lr, r",9, VAL2,", r",8, VAL1,"")
 238        TEST_R(    "qsub        lr, r",9, VAL2,", r13")
 239        TEST_RR(   "qdadd       r0, r",1, VAL1,", r",2, VAL2,"")
 240        TEST_RR(   "qdaddvs     lr, r",9, VAL2,", r",8, VAL1,"")
 241        TEST_R(    "qdadd       lr, r",9, VAL2,", r13")
 242        TEST_RR(   "qdsub       r0, r",1, VAL1,", r",2, VAL2,"")
 243        TEST_RR(   "qdsubvs     lr, r",9, VAL2,", r",8, VAL1,"")
 244        TEST_R(    "qdsub       lr, r",9, VAL2,", r13")
 245        TEST_UNSUPPORTED(".word 0xe101f050      @ qadd pc, r0, r1")
 246        TEST_UNSUPPORTED(".word 0xe121f050      @ qsub pc, r0, r1")
 247        TEST_UNSUPPORTED(".word 0xe141f050      @ qdadd pc, r0, r1")
 248        TEST_UNSUPPORTED(".word 0xe161f050      @ qdsub pc, r0, r1")
 249        TEST_UNSUPPORTED(".word 0xe16f2050      @ qdsub r2, r0, pc")
 250        TEST_UNSUPPORTED(".word 0xe161205f      @ qdsub r2, pc, r1")
 251
 252        TEST_UNSUPPORTED("bkpt  0xffff")
 253        TEST_UNSUPPORTED("bkpt  0x0000")
 254
 255        TEST_UNSUPPORTED(".word 0xe1600070 @ smc #0")
 256
 257        TEST_GROUP("Halfword multiply and multiply-accumulate")
 258
 259        TEST_RRR(    "smlabb    r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
 260        TEST_RRR(    "smlabbge  r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
 261        TEST_RR(     "smlabb    lr, r",1, VAL2,", r",2, VAL3,", r13")
 262        TEST_UNSUPPORTED(".word 0xe10f3281 @ smlabb pc, r1, r2, r3")
 263        TEST_RRR(    "smlatb    r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
 264        TEST_RRR(    "smlatbge  r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
 265        TEST_RR(     "smlatb    lr, r",1, VAL2,", r",2, VAL3,", r13")
 266        TEST_UNSUPPORTED(".word 0xe10f32a1 @ smlatb pc, r1, r2, r3")
 267        TEST_RRR(    "smlabt    r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
 268        TEST_RRR(    "smlabtge  r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
 269        TEST_RR(     "smlabt    lr, r",1, VAL2,", r",2, VAL3,", r13")
 270        TEST_UNSUPPORTED(".word 0xe10f32c1 @ smlabt pc, r1, r2, r3")
 271        TEST_RRR(    "smlatt    r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
 272        TEST_RRR(    "smlattge  r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
 273        TEST_RR(     "smlatt    lr, r",1, VAL2,", r",2, VAL3,", r13")
 274        TEST_UNSUPPORTED(".word 0xe10f32e1 @ smlatt pc, r1, r2, r3")
 275
 276        TEST_RRR(    "smlawb    r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
 277        TEST_RRR(    "smlawbge  r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
 278        TEST_RR(     "smlawb    lr, r",1, VAL2,", r",2, VAL3,", r13")
 279        TEST_UNSUPPORTED(".word 0xe12f3281 @ smlawb pc, r1, r2, r3")
 280        TEST_RRR(    "smlawt    r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
 281        TEST_RRR(    "smlawtge  r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
 282        TEST_RR(     "smlawt    lr, r",1, VAL2,", r",2, VAL3,", r13")
 283        TEST_UNSUPPORTED(".word 0xe12f32c1 @ smlawt pc, r1, r2, r3")
 284        TEST_UNSUPPORTED(".word 0xe12032cf @ smlawt r0, pc, r2, r3")
 285        TEST_UNSUPPORTED(".word 0xe1203fc1 @ smlawt r0, r1, pc, r3")
 286        TEST_UNSUPPORTED(".word 0xe120f2c1 @ smlawt r0, r1, r2, pc")
 287
 288        TEST_RR(    "smulwb     r0, r",1, VAL1,", r",2, VAL2,"")
 289        TEST_RR(    "smulwbge   r7, r",8, VAL3,", r",9, VAL1,"")
 290        TEST_R(     "smulwb     lr, r",1, VAL2,", r13")
 291        TEST_UNSUPPORTED(".word 0xe12f02a1 @ smulwb pc, r1, r2")
 292        TEST_RR(    "smulwt     r0, r",1, VAL1,", r",2, VAL2,"")
 293        TEST_RR(    "smulwtge   r7, r",8, VAL3,", r",9, VAL1,"")
 294        TEST_R(     "smulwt     lr, r",1, VAL2,", r13")
 295        TEST_UNSUPPORTED(".word 0xe12f02e1 @ smulwt pc, r1, r2")
 296
 297        TEST_RRRR(  "smlalbb    r",0, VAL1,", r",1, VAL2,", r",2, VAL3,", r",3, VAL4)
 298        TEST_RRRR(  "smlalbble  r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
 299        TEST_RRR(   "smlalbb    r",14,VAL3,", r",7, VAL4,", r",5, VAL1,", r13")
 300        TEST_UNSUPPORTED(".word 0xe14f1382 @ smlalbb pc, r1, r2, r3")
 301        TEST_UNSUPPORTED(".word 0xe141f382 @ smlalbb r1, pc, r2, r3")
 302        TEST_RRRR(  "smlaltb    r",0, VAL1,", r",1, VAL2,", r",2, VAL3,", r",3, VAL4)
 303        TEST_RRRR(  "smlaltble  r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
 304        TEST_RRR(   "smlaltb    r",14,VAL3,", r",7, VAL4,", r",5, VAL1,", r13")
 305        TEST_UNSUPPORTED(".word 0xe14f13a2 @ smlaltb pc, r1, r2, r3")
 306        TEST_UNSUPPORTED(".word 0xe141f3a2 @ smlaltb r1, pc, r2, r3")
 307        TEST_RRRR(  "smlalbt    r",0, VAL1,", r",1, VAL2,", r",2, VAL3,", r",3, VAL4)
 308        TEST_RRRR(  "smlalbtle  r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
 309        TEST_RRR(   "smlalbt    r",14,VAL3,", r",7, VAL4,", r",5, VAL1,", r13")
 310        TEST_UNSUPPORTED(".word 0xe14f13c2 @ smlalbt pc, r1, r2, r3")
 311        TEST_UNSUPPORTED(".word 0xe141f3c2 @ smlalbt r1, pc, r2, r3")
 312        TEST_RRRR(  "smlaltt    r",0, VAL1,", r",1, VAL2,", r",2, VAL3,", r",3, VAL4)
 313        TEST_RRRR(  "smlalttle  r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
 314        TEST_RRR(   "smlaltt    r",14,VAL3,", r",7, VAL4,", r",5, VAL1,", r13")
 315        TEST_UNSUPPORTED(".word 0xe14f13e2 @ smlalbb pc, r1, r2, r3")
 316        TEST_UNSUPPORTED(".word 0xe140f3e2 @ smlalbb r0, pc, r2, r3")
 317        TEST_UNSUPPORTED(".word 0xe14013ef @ smlalbb r0, r1, pc, r3")
 318        TEST_UNSUPPORTED(".word 0xe1401fe2 @ smlalbb r0, r1, r2, pc")
 319
 320        TEST_RR(    "smulbb     r0, r",1, VAL1,", r",2, VAL2,"")
 321        TEST_RR(    "smulbbge   r7, r",8, VAL3,", r",9, VAL1,"")
 322        TEST_R(     "smulbb     lr, r",1, VAL2,", r13")
 323        TEST_UNSUPPORTED(".word 0xe16f0281 @ smulbb pc, r1, r2")
 324        TEST_RR(    "smultb     r0, r",1, VAL1,", r",2, VAL2,"")
 325        TEST_RR(    "smultbge   r7, r",8, VAL3,", r",9, VAL1,"")
 326        TEST_R(     "smultb     lr, r",1, VAL2,", r13")
 327        TEST_UNSUPPORTED(".word 0xe16f02a1 @ smultb pc, r1, r2")
 328        TEST_RR(    "smulbt     r0, r",1, VAL1,", r",2, VAL2,"")
 329        TEST_RR(    "smulbtge   r7, r",8, VAL3,", r",9, VAL1,"")
 330        TEST_R(     "smulbt     lr, r",1, VAL2,", r13")
 331        TEST_UNSUPPORTED(".word 0xe16f02c1 @ smultb pc, r1, r2")
 332        TEST_RR(    "smultt     r0, r",1, VAL1,", r",2, VAL2,"")
 333        TEST_RR(    "smulttge   r7, r",8, VAL3,", r",9, VAL1,"")
 334        TEST_R(     "smultt     lr, r",1, VAL2,", r13")
 335        TEST_UNSUPPORTED(".word 0xe16f02e1 @ smultt pc, r1, r2")
 336        TEST_UNSUPPORTED(".word 0xe16002ef @ smultt r0, pc, r2")
 337        TEST_UNSUPPORTED(".word 0xe1600fe1 @ smultt r0, r1, pc")
 338
 339        TEST_GROUP("Multiply and multiply-accumulate")
 340
 341        TEST_RR(    "mul        r0, r",1, VAL1,", r",2, VAL2,"")
 342        TEST_RR(    "mulls      r7, r",8, VAL2,", r",9, VAL2,"")
 343        TEST_R(     "mul        lr, r",4, VAL3,", r13")
 344        TEST_UNSUPPORTED(".word 0xe00f0291 @ mul pc, r1, r2")
 345        TEST_UNSUPPORTED(".word 0xe000029f @ mul r0, pc, r2")
 346        TEST_UNSUPPORTED(".word 0xe0000f91 @ mul r0, r1, pc")
 347        TEST_RR(    "muls       r0, r",1, VAL1,", r",2, VAL2,"")
 348        TEST_RR(    "mullss     r7, r",8, VAL2,", r",9, VAL2,"")
 349        TEST_R(     "muls       lr, r",4, VAL3,", r13")
 350        TEST_UNSUPPORTED(".word 0xe01f0291 @ muls pc, r1, r2")
 351
 352        TEST_RRR(    "mla       r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
 353        TEST_RRR(    "mlahi     r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
 354        TEST_RR(     "mla       lr, r",1, VAL2,", r",2, VAL3,", r13")
 355        TEST_UNSUPPORTED(".word 0xe02f3291 @ mla pc, r1, r2, r3")
 356        TEST_RRR(    "mlas      r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
 357        TEST_RRR(    "mlahis    r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
 358        TEST_RR(     "mlas      lr, r",1, VAL2,", r",2, VAL3,", r13")
 359        TEST_UNSUPPORTED(".word 0xe03f3291 @ mlas pc, r1, r2, r3")
 360
 361#if __LINUX_ARM_ARCH__ >= 6
 362        TEST_RR(  "umaal        r0, r1, r",2, VAL1,", r",3, VAL2,"")
 363        TEST_RR(  "umaalls      r7, r8, r",9, VAL2,", r",10, VAL1,"")
 364        TEST_R(   "umaal        lr, r12, r",11,VAL3,", r13")
 365        TEST_UNSUPPORTED(".word 0xe041f392 @ umaal pc, r1, r2, r3")
 366        TEST_UNSUPPORTED(".word 0xe04f0392 @ umaal r0, pc, r2, r3")
 367        TEST_UNSUPPORTED(".word 0xe0500090 @ undef")
 368        TEST_UNSUPPORTED(".word 0xe05fff9f @ undef")
 369#endif
 370
 371#if __LINUX_ARM_ARCH__ >= 7
 372        TEST_RRR(  "mls         r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
 373        TEST_RRR(  "mlshi       r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
 374        TEST_RR(   "mls         lr, r",1, VAL2,", r",2, VAL3,", r13")
 375        TEST_UNSUPPORTED(".word 0xe06f3291 @ mls pc, r1, r2, r3")
 376        TEST_UNSUPPORTED(".word 0xe060329f @ mls r0, pc, r2, r3")
 377        TEST_UNSUPPORTED(".word 0xe0603f91 @ mls r0, r1, pc, r3")
 378        TEST_UNSUPPORTED(".word 0xe060f291 @ mls r0, r1, r2, pc")
 379#endif
 380
 381        TEST_UNSUPPORTED(".word 0xe0700090 @ undef")
 382        TEST_UNSUPPORTED(".word 0xe07fff9f @ undef")
 383
 384        TEST_RR(  "umull        r0, r1, r",2, VAL1,", r",3, VAL2,"")
 385        TEST_RR(  "umullls      r7, r8, r",9, VAL2,", r",10, VAL1,"")
 386        TEST_R(   "umull        lr, r12, r",11,VAL3,", r13")
 387        TEST_UNSUPPORTED(".word 0xe081f392 @ umull pc, r1, r2, r3")
 388        TEST_UNSUPPORTED(".word 0xe08f1392 @ umull r1, pc, r2, r3")
 389        TEST_RR(  "umulls       r0, r1, r",2, VAL1,", r",3, VAL2,"")
 390        TEST_RR(  "umulllss     r7, r8, r",9, VAL2,", r",10, VAL1,"")
 391        TEST_R(   "umulls       lr, r12, r",11,VAL3,", r13")
 392        TEST_UNSUPPORTED(".word 0xe091f392 @ umulls pc, r1, r2, r3")
 393        TEST_UNSUPPORTED(".word 0xe09f1392 @ umulls r1, pc, r2, r3")
 394
 395        TEST_RRRR(  "umlal      r",0, VAL1,", r",1, VAL2,", r",2, VAL3,", r",3, VAL4)
 396        TEST_RRRR(  "umlalle    r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
 397        TEST_RRR(   "umlal      r",14,VAL3,", r",7, VAL4,", r",5, VAL1,", r13")
 398        TEST_UNSUPPORTED(".word 0xe0af1392 @ umlal pc, r1, r2, r3")
 399        TEST_UNSUPPORTED(".word 0xe0a1f392 @ umlal r1, pc, r2, r3")
 400        TEST_RRRR(  "umlals     r",0, VAL1,", r",1, VAL2,", r",2, VAL3,", r",3, VAL4)
 401        TEST_RRRR(  "umlalles   r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
 402        TEST_RRR(   "umlals     r",14,VAL3,", r",7, VAL4,", r",5, VAL1,", r13")
 403        TEST_UNSUPPORTED(".word 0xe0bf1392 @ umlals pc, r1, r2, r3")
 404        TEST_UNSUPPORTED(".word 0xe0b1f392 @ umlals r1, pc, r2, r3")
 405
 406        TEST_RR(  "smull        r0, r1, r",2, VAL1,", r",3, VAL2,"")
 407        TEST_RR(  "smullls      r7, r8, r",9, VAL2,", r",10, VAL1,"")
 408        TEST_R(   "smull        lr, r12, r",11,VAL3,", r13")
 409        TEST_UNSUPPORTED(".word 0xe0c1f392 @ smull pc, r1, r2, r3")
 410        TEST_UNSUPPORTED(".word 0xe0cf1392 @ smull r1, pc, r2, r3")
 411        TEST_RR(  "smulls       r0, r1, r",2, VAL1,", r",3, VAL2,"")
 412        TEST_RR(  "smulllss     r7, r8, r",9, VAL2,", r",10, VAL1,"")
 413        TEST_R(   "smulls       lr, r12, r",11,VAL3,", r13")
 414        TEST_UNSUPPORTED(".word 0xe0d1f392 @ smulls pc, r1, r2, r3")
 415        TEST_UNSUPPORTED(".word 0xe0df1392 @ smulls r1, pc, r2, r3")
 416
 417        TEST_RRRR(  "smlal      r",0, VAL1,", r",1, VAL2,", r",2, VAL3,", r",3, VAL4)
 418        TEST_RRRR(  "smlalle    r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
 419        TEST_RRR(   "smlal      r",14,VAL3,", r",7, VAL4,", r",5, VAL1,", r13")
 420        TEST_UNSUPPORTED(".word 0xe0ef1392 @ smlal pc, r1, r2, r3")
 421        TEST_UNSUPPORTED(".word 0xe0e1f392 @ smlal r1, pc, r2, r3")
 422        TEST_RRRR(  "smlals     r",0, VAL1,", r",1, VAL2,", r",2, VAL3,", r",3, VAL4)
 423        TEST_RRRR(  "smlalles   r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
 424        TEST_RRR(   "smlals     r",14,VAL3,", r",7, VAL4,", r",5, VAL1,", r13")
 425        TEST_UNSUPPORTED(".word 0xe0ff1392 @ smlals pc, r1, r2, r3")
 426        TEST_UNSUPPORTED(".word 0xe0f0f392 @ smlals r0, pc, r2, r3")
 427        TEST_UNSUPPORTED(".word 0xe0f0139f @ smlals r0, r1, pc, r3")
 428        TEST_UNSUPPORTED(".word 0xe0f01f92 @ smlals r0, r1, r2, pc")
 429
 430        TEST_GROUP("Synchronization primitives")
 431
 432#if __LINUX_ARM_ARCH__ < 6
 433        TEST_RP("swp    lr, r",7,VAL2,", [r",8,0,"]")
 434        TEST_R( "swpvs  r0, r",1,VAL1,", [sp]")
 435        TEST_RP("swp    sp, r",14,VAL2,", [r",12,13*4,"]")
 436#else
 437        TEST_UNSUPPORTED(".word 0xe108e097 @ swp        lr, r7, [r8]")
 438        TEST_UNSUPPORTED(".word 0x610d0091 @ swpvs      r0, r1, [sp]")
 439        TEST_UNSUPPORTED(".word 0xe10cd09e @ swp        sp, r14 [r12]")
 440#endif
 441        TEST_UNSUPPORTED(".word 0xe102f091 @ swp pc, r1, [r2]")
 442        TEST_UNSUPPORTED(".word 0xe102009f @ swp r0, pc, [r2]")
 443        TEST_UNSUPPORTED(".word 0xe10f0091 @ swp r0, r1, [pc]")
 444#if __LINUX_ARM_ARCH__ < 6
 445        TEST_RP("swpb   lr, r",7,VAL2,", [r",8,0,"]")
 446        TEST_R( "swpvsb r0, r",1,VAL1,", [sp]")
 447#else
 448        TEST_UNSUPPORTED(".word 0xe148e097 @ swpb       lr, r7, [r8]")
 449        TEST_UNSUPPORTED(".word 0x614d0091 @ swpvsb     r0, r1, [sp]")
 450#endif
 451        TEST_UNSUPPORTED(".word 0xe142f091 @ swpb pc, r1, [r2]")
 452
 453        TEST_UNSUPPORTED(".word 0xe1100090") /* Unallocated space */
 454        TEST_UNSUPPORTED(".word 0xe1200090") /* Unallocated space */
 455        TEST_UNSUPPORTED(".word 0xe1300090") /* Unallocated space */
 456        TEST_UNSUPPORTED(".word 0xe1500090") /* Unallocated space */
 457        TEST_UNSUPPORTED(".word 0xe1600090") /* Unallocated space */
 458        TEST_UNSUPPORTED(".word 0xe1700090") /* Unallocated space */
 459#if __LINUX_ARM_ARCH__ >= 6
 460        TEST_UNSUPPORTED("ldrex r2, [sp]")
 461#endif
 462#if (__LINUX_ARM_ARCH__ >= 7) || defined(CONFIG_CPU_32v6K)
 463        TEST_UNSUPPORTED("strexd        r0, r2, r3, [sp]")
 464        TEST_UNSUPPORTED("ldrexd        r2, r3, [sp]")
 465        TEST_UNSUPPORTED("strexb        r0, r2, [sp]")
 466        TEST_UNSUPPORTED("ldrexb        r2, [sp]")
 467        TEST_UNSUPPORTED("strexh        r0, r2, [sp]")
 468        TEST_UNSUPPORTED("ldrexh        r2, [sp]")
 469#endif
 470        TEST_GROUP("Extra load/store instructions")
 471
 472        TEST_RPR(  "strh        r",0, VAL1,", [r",1, 48,", -r",2, 24,"]")
 473        TEST_RPR(  "streqh      r",14,VAL2,", [r",13,0, ", r",12, 48,"]")
 474        TEST_RPR(  "strh        r",1, VAL1,", [r",2, 24,", r",3,  48,"]!")
 475        TEST_RPR(  "strneh      r",12,VAL2,", [r",11,48,", -r",10,24,"]!")
 476        TEST_RPR(  "strh        r",2, VAL1,", [r",3, 24,"], r",4, 48,"")
 477        TEST_RPR(  "strh        r",10,VAL2,", [r",9, 48,"], -r",11,24,"")
 478        TEST_UNSUPPORTED(".word 0xe1afc0ba      @ strh r12, [pc, r10]!")
 479        TEST_UNSUPPORTED(".word 0xe089f0bb      @ strh pc, [r9], r11")
 480        TEST_UNSUPPORTED(".word 0xe089a0bf      @ strh r10, [r9], pc")
 481
 482        TEST_PR(   "ldrh        r0, [r",0,  48,", -r",2, 24,"]")
 483        TEST_PR(   "ldrcsh      r14, [r",13,0, ", r",12, 48,"]")
 484        TEST_PR(   "ldrh        r1, [r",2,  24,", r",3,  48,"]!")
 485        TEST_PR(   "ldrcch      r12, [r",11,48,", -r",10,24,"]!")
 486        TEST_PR(   "ldrh        r2, [r",3,  24,"], r",4, 48,"")
 487        TEST_PR(   "ldrh        r10, [r",9, 48,"], -r",11,24,"")
 488        TEST_UNSUPPORTED(".word 0xe1bfc0ba      @ ldrh r12, [pc, r10]!")
 489        TEST_UNSUPPORTED(".word 0xe099f0bb      @ ldrh pc, [r9], r11")
 490        TEST_UNSUPPORTED(".word 0xe099a0bf      @ ldrh r10, [r9], pc")
 491
 492        TEST_RP(   "strh        r",0, VAL1,", [r",1, 24,", #-2]")
 493        TEST_RP(   "strmih      r",14,VAL2,", [r",13,0, ", #2]")
 494        TEST_RP(   "strh        r",1, VAL1,", [r",2, 24,", #4]!")
 495        TEST_RP(   "strplh      r",12,VAL2,", [r",11,24,", #-4]!")
 496        TEST_RP(   "strh        r",2, VAL1,", [r",3, 24,"], #48")
 497        TEST_RP(   "strh        r",10,VAL2,", [r",9, 64,"], #-48")
 498        TEST_UNSUPPORTED(".word 0xe1efc3b0      @ strh r12, [pc, #48]!")
 499        TEST_UNSUPPORTED(".word 0xe0c9f3b0      @ strh pc, [r9], #48")
 500
 501        TEST_P(    "ldrh        r0, [r",0,  24,", #-2]")
 502        TEST_P(    "ldrvsh      r14, [r",13,0, ", #2]")
 503        TEST_P(    "ldrh        r1, [r",2,  24,", #4]!")
 504        TEST_P(    "ldrvch      r12, [r",11,24,", #-4]!")
 505        TEST_P(    "ldrh        r2, [r",3,  24,"], #48")
 506        TEST_P(    "ldrh        r10, [r",9, 64,"], #-48")
 507        TEST(      "ldrh        r0, [pc, #0]")
 508        TEST_UNSUPPORTED(".word 0xe1ffc3b0      @ ldrh r12, [pc, #48]!")
 509        TEST_UNSUPPORTED(".word 0xe0d9f3b0      @ ldrh pc, [r9], #48")
 510
 511        TEST_PR(   "ldrsb       r0, [r",0,  48,", -r",2, 24,"]")
 512        TEST_PR(   "ldrhisb     r14, [r",13,0,", r",12,  48,"]")
 513        TEST_PR(   "ldrsb       r1, [r",2,  24,", r",3,  48,"]!")
 514        TEST_PR(   "ldrlssb     r12, [r",11,48,", -r",10,24,"]!")
 515        TEST_PR(   "ldrsb       r2, [r",3,  24,"], r",4, 48,"")
 516        TEST_PR(   "ldrsb       r10, [r",9, 48,"], -r",11,24,"")
 517        TEST_UNSUPPORTED(".word 0xe1bfc0da      @ ldrsb r12, [pc, r10]!")
 518        TEST_UNSUPPORTED(".word 0xe099f0db      @ ldrsb pc, [r9], r11")
 519
 520        TEST_P(    "ldrsb       r0, [r",0,  24,", #-1]")
 521        TEST_P(    "ldrgesb     r14, [r",13,0, ", #1]")
 522        TEST_P(    "ldrsb       r1, [r",2,  24,", #4]!")
 523        TEST_P(    "ldrltsb     r12, [r",11,24,", #-4]!")
 524        TEST_P(    "ldrsb       r2, [r",3,  24,"], #48")
 525        TEST_P(    "ldrsb       r10, [r",9, 64,"], #-48")
 526        TEST(      "ldrsb       r0, [pc, #0]")
 527        TEST_UNSUPPORTED(".word 0xe1ffc3d0      @ ldrsb r12, [pc, #48]!")
 528        TEST_UNSUPPORTED(".word 0xe0d9f3d0      @ ldrsb pc, [r9], #48")
 529
 530        TEST_PR(   "ldrsh       r0, [r",0,  48,", -r",2, 24,"]")
 531        TEST_PR(   "ldrgtsh     r14, [r",13,0, ", r",12, 48,"]")
 532        TEST_PR(   "ldrsh       r1, [r",2,  24,", r",3,  48,"]!")
 533        TEST_PR(   "ldrlesh     r12, [r",11,48,", -r",10,24,"]!")
 534        TEST_PR(   "ldrsh       r2, [r",3,  24,"], r",4, 48,"")
 535        TEST_PR(   "ldrsh       r10, [r",9, 48,"], -r",11,24,"")
 536        TEST_UNSUPPORTED(".word 0xe1bfc0fa      @ ldrsh r12, [pc, r10]!")
 537        TEST_UNSUPPORTED(".word 0xe099f0fb      @ ldrsh pc, [r9], r11")
 538
 539        TEST_P(    "ldrsh       r0, [r",0,  24,", #-1]")
 540        TEST_P(    "ldreqsh     r14, [r",13,0 ,", #1]")
 541        TEST_P(    "ldrsh       r1, [r",2,  24,", #4]!")
 542        TEST_P(    "ldrnesh     r12, [r",11,24,", #-4]!")
 543        TEST_P(    "ldrsh       r2, [r",3,  24,"], #48")
 544        TEST_P(    "ldrsh       r10, [r",9, 64,"], #-48")
 545        TEST(      "ldrsh       r0, [pc, #0]")
 546        TEST_UNSUPPORTED(".word 0xe1ffc3f0      @ ldrsh r12, [pc, #48]!")
 547        TEST_UNSUPPORTED(".word 0xe0d9f3f0      @ ldrsh pc, [r9], #48")
 548
 549#if __LINUX_ARM_ARCH__ >= 7
 550        TEST_UNSUPPORTED("strht r1, [r2], r3")
 551        TEST_UNSUPPORTED("ldrht r1, [r2], r3")
 552        TEST_UNSUPPORTED("strht r1, [r2], #48")
 553        TEST_UNSUPPORTED("ldrht r1, [r2], #48")
 554        TEST_UNSUPPORTED("ldrsbt        r1, [r2], r3")
 555        TEST_UNSUPPORTED("ldrsbt        r1, [r2], #48")
 556        TEST_UNSUPPORTED("ldrsht        r1, [r2], r3")
 557        TEST_UNSUPPORTED("ldrsht        r1, [r2], #48")
 558#endif
 559
 560        TEST_RPR(  "strd        r",0, VAL1,", [r",1, 48,", -r",2,24,"]")
 561        TEST_RPR(  "strccd      r",8, VAL2,", [r",13,0, ", r",12,48,"]")
 562        TEST_RPR(  "strd        r",4, VAL1,", [r",2, 24,", r",3, 48,"]!")
 563        TEST_RPR(  "strcsd      r",12,VAL2,", [r",11,48,", -r",10,24,"]!")
 564        TEST_RPR(  "strd        r",2, VAL1,", [r",5, 24,"], r",4,48,"")
 565        TEST_RPR(  "strd        r",10,VAL2,", [r",9, 48,"], -r",7,24,"")
 566        TEST_UNSUPPORTED(".word 0xe1afc0fa      @ strd r12, [pc, r10]!")
 567
 568        TEST_PR(   "ldrd        r0, [r",0, 48,", -r",2,24,"]")
 569        TEST_PR(   "ldrmid      r8, [r",13,0, ", r",12,48,"]")
 570        TEST_PR(   "ldrd        r4, [r",2, 24,", r",3, 48,"]!")
 571        TEST_PR(   "ldrpld      r6, [r",11,48,", -r",10,24,"]!")
 572        TEST_PR(   "ldrd        r2, [r",5, 24,"], r",4,48,"")
 573        TEST_PR(   "ldrd        r10, [r",9,48,"], -r",7,24,"")
 574        TEST_UNSUPPORTED(".word 0xe1afc0da      @ ldrd r12, [pc, r10]!")
 575        TEST_UNSUPPORTED(".word 0xe089f0db      @ ldrd pc, [r9], r11")
 576        TEST_UNSUPPORTED(".word 0xe089e0db      @ ldrd lr, [r9], r11")
 577        TEST_UNSUPPORTED(".word 0xe089c0df      @ ldrd r12, [r9], pc")
 578
 579        TEST_RP(   "strd        r",0, VAL1,", [r",1, 24,", #-8]")
 580        TEST_RP(   "strvsd      r",8, VAL2,", [r",13,0, ", #8]")
 581        TEST_RP(   "strd        r",4, VAL1,", [r",2, 24,", #16]!")
 582        TEST_RP(   "strvcd      r",12,VAL2,", [r",11,24,", #-16]!")
 583        TEST_RP(   "strd        r",2, VAL1,", [r",4, 24,"], #48")
 584        TEST_RP(   "strd        r",10,VAL2,", [r",9, 64,"], #-48")
 585        TEST_UNSUPPORTED(".word 0xe1efc3f0      @ strd r12, [pc, #48]!")
 586
 587        TEST_P(    "ldrd        r0, [r",0, 24,", #-8]")
 588        TEST_P(    "ldrhid      r8, [r",13,0, ", #8]")
 589        TEST_P(    "ldrd        r4, [r",2, 24,", #16]!")
 590        TEST_P(    "ldrlsd      r6, [r",11,24,", #-16]!")
 591        TEST_P(    "ldrd        r2, [r",5, 24,"], #48")
 592        TEST_P(    "ldrd        r10, [r",9,6,"], #-48")
 593        TEST_UNSUPPORTED(".word 0xe1efc3d0      @ ldrd r12, [pc, #48]!")
 594        TEST_UNSUPPORTED(".word 0xe0c9f3d0      @ ldrd pc, [r9], #48")
 595        TEST_UNSUPPORTED(".word 0xe0c9e3d0      @ ldrd lr, [r9], #48")
 596
 597        TEST_GROUP("Miscellaneous")
 598
 599#if __LINUX_ARM_ARCH__ >= 7
 600        TEST("movw      r0, #0")
 601        TEST("movw      r0, #0xffff")
 602        TEST("movw      lr, #0xffff")
 603        TEST_UNSUPPORTED(".word 0xe300f000      @ movw pc, #0")
 604        TEST_R("movt    r",0, VAL1,", #0")
 605        TEST_R("movt    r",0, VAL2,", #0xffff")
 606        TEST_R("movt    r",14,VAL1,", #0xffff")
 607        TEST_UNSUPPORTED(".word 0xe340f000      @ movt pc, #0")
 608#endif
 609
 610        TEST_UNSUPPORTED("msr   cpsr, 0x13")
 611        TEST_UNSUPPORTED("msr   cpsr_f, 0xf0000000")
 612        TEST_UNSUPPORTED("msr   spsr, 0x13")
 613
 614#if __LINUX_ARM_ARCH__ >= 7
 615        TEST_SUPPORTED("yield")
 616        TEST("sev")
 617        TEST("nop")
 618        TEST("wfi")
 619        TEST_SUPPORTED("wfe")
 620        TEST_UNSUPPORTED("dbg #0")
 621#endif
 622
 623        TEST_GROUP("Load/store word and unsigned byte")
 624
 625#define LOAD_STORE(byte)                                                        \
 626        TEST_RP( "str"byte"     r",0, VAL1,", [r",1, 24,", #-2]")               \
 627        TEST_RP( "str"byte"     r",14,VAL2,", [r",13,0, ", #2]")                \
 628        TEST_RP( "str"byte"     r",1, VAL1,", [r",2, 24,", #4]!")               \
 629        TEST_RP( "str"byte"     r",12,VAL2,", [r",11,24,", #-4]!")              \
 630        TEST_RP( "str"byte"     r",2, VAL1,", [r",3, 24,"], #48")               \
 631        TEST_RP( "str"byte"     r",10,VAL2,", [r",9, 64,"], #-48")              \
 632        TEST_RPR("str"byte"     r",0, VAL1,", [r",1, 48,", -r",2, 24,"]")       \
 633        TEST_RPR("str"byte"     r",14,VAL2,", [r",13,0, ", r",12, 48,"]")       \
 634        TEST_RPR("str"byte"     r",1, VAL1,", [r",2, 24,", r",3,  48,"]!")      \
 635        TEST_RPR("str"byte"     r",12,VAL2,", [r",11,48,", -r",10,24,"]!")      \
 636        TEST_RPR("str"byte"     r",2, VAL1,", [r",3, 24,"], r",4, 48,"")        \
 637        TEST_RPR("str"byte"     r",10,VAL2,", [r",9, 48,"], -r",11,24,"")       \
 638        TEST_RPR("str"byte"     r",0, VAL1,", [r",1, 24,", r",2,  32,", asl #1]")\
 639        TEST_RPR("str"byte"     r",14,VAL2,", [r",13,0, ", r",12, 32,", lsr #2]")\
 640        TEST_RPR("str"byte"     r",1, VAL1,", [r",2, 24,", r",3,  32,", asr #3]!")\
 641        TEST_RPR("str"byte"     r",12,VAL2,", [r",11,24,", r",10, 4,", ror #31]!")\
 642        TEST_P(  "ldr"byte"     r0, [r",0,  24,", #-2]")                        \
 643        TEST_P(  "ldr"byte"     r14, [r",13,0, ", #2]")                         \
 644        TEST_P(  "ldr"byte"     r1, [r",2,  24,", #4]!")                        \
 645        TEST_P(  "ldr"byte"     r12, [r",11,24,", #-4]!")                       \
 646        TEST_P(  "ldr"byte"     r2, [r",3,  24,"], #48")                        \
 647        TEST_P(  "ldr"byte"     r10, [r",9, 64,"], #-48")                       \
 648        TEST_PR( "ldr"byte"     r0, [r",0,  48,", -r",2, 24,"]")                \
 649        TEST_PR( "ldr"byte"     r14, [r",13,0, ", r",12, 48,"]")                \
 650        TEST_PR( "ldr"byte"     r1, [r",2,  24,", r",3, 48,"]!")                \
 651        TEST_PR( "ldr"byte"     r12, [r",11,48,", -r",10,24,"]!")               \
 652        TEST_PR( "ldr"byte"     r2, [r",3,  24,"], r",4, 48,"")                 \
 653        TEST_PR( "ldr"byte"     r10, [r",9, 48,"], -r",11,24,"")                \
 654        TEST_PR( "ldr"byte"     r0, [r",0,  24,", r",2,  32,", asl #1]")        \
 655        TEST_PR( "ldr"byte"     r14, [r",13,0, ", r",12, 32,", lsr #2]")        \
 656        TEST_PR( "ldr"byte"     r1, [r",2,  24,", r",3,  32,", asr #3]!")       \
 657        TEST_PR( "ldr"byte"     r12, [r",11,24,", r",10, 4,", ror #31]!")       \
 658        TEST(    "ldr"byte"     r0, [pc, #0]")                                  \
 659        TEST_R(  "ldr"byte"     r12, [pc, r",14,0,"]")
 660
 661        LOAD_STORE("")
 662        TEST_P(   "str  pc, [r",0,0,", #15*4]")
 663        TEST_R(   "str  pc, [sp, r",2,15*4,"]")
 664        TEST_BF(  "ldr  pc, [sp, #15*4]")
 665        TEST_BF_R("ldr  pc, [sp, r",2,15*4,"]")
 666
 667        TEST_P(   "str  sp, [r",0,0,", #13*4]")
 668        TEST_R(   "str  sp, [sp, r",2,13*4,"]")
 669        TEST_BF(  "ldr  sp, [sp, #13*4]")
 670        TEST_BF_R("ldr  sp, [sp, r",2,13*4,"]")
 671
 672#ifdef CONFIG_THUMB2_KERNEL
 673        TEST_ARM_TO_THUMB_INTERWORK_P("ldr      pc, [r",0,0,", #15*4]")
 674#endif
 675        TEST_UNSUPPORTED(".word 0xe5af6008      @ str r6, [pc, #8]!")
 676        TEST_UNSUPPORTED(".word 0xe7af6008      @ str r6, [pc, r8]!")
 677        TEST_UNSUPPORTED(".word 0xe5bf6008      @ ldr r6, [pc, #8]!")
 678        TEST_UNSUPPORTED(".word 0xe7bf6008      @ ldr r6, [pc, r8]!")
 679        TEST_UNSUPPORTED(".word 0xe788600f      @ str r6, [r8, pc]")
 680        TEST_UNSUPPORTED(".word 0xe798600f      @ ldr r6, [r8, pc]")
 681
 682        LOAD_STORE("b")
 683        TEST_UNSUPPORTED(".word 0xe5f7f008      @ ldrb pc, [r7, #8]!")
 684        TEST_UNSUPPORTED(".word 0xe7f7f008      @ ldrb pc, [r7, r8]!")
 685        TEST_UNSUPPORTED(".word 0xe5ef6008      @ strb r6, [pc, #8]!")
 686        TEST_UNSUPPORTED(".word 0xe7ef6008      @ strb r6, [pc, r3]!")
 687        TEST_UNSUPPORTED(".word 0xe5ff6008      @ ldrb r6, [pc, #8]!")
 688        TEST_UNSUPPORTED(".word 0xe7ff6008      @ ldrb r6, [pc, r3]!")
 689
 690        TEST_UNSUPPORTED("ldrt  r0, [r1], #4")
 691        TEST_UNSUPPORTED("ldrt  r1, [r2], r3")
 692        TEST_UNSUPPORTED("strt  r2, [r3], #4")
 693        TEST_UNSUPPORTED("strt  r3, [r4], r5")
 694        TEST_UNSUPPORTED("ldrbt r4, [r5], #4")
 695        TEST_UNSUPPORTED("ldrbt r5, [r6], r7")
 696        TEST_UNSUPPORTED("strbt r6, [r7], #4")
 697        TEST_UNSUPPORTED("strbt r7, [r8], r9")
 698
 699#if __LINUX_ARM_ARCH__ >= 7
 700        TEST_GROUP("Parallel addition and subtraction, signed")
 701
 702        TEST_UNSUPPORTED(".word 0xe6000010") /* Unallocated space */
 703        TEST_UNSUPPORTED(".word 0xe60fffff") /* Unallocated space */
 704
 705        TEST_RR(    "sadd16     r0, r",0,  HH1,", r",1, HH2,"")
 706        TEST_RR(    "sadd16     r14, r",12,HH2,", r",10,HH1,"")
 707        TEST_UNSUPPORTED(".word 0xe61cff1a      @ sadd16        pc, r12, r10")
 708        TEST_RR(    "sasx       r0, r",0,  HH1,", r",1, HH2,"")
 709        TEST_RR(    "sasx       r14, r",12,HH2,", r",10,HH1,"")
 710        TEST_UNSUPPORTED(".word 0xe61cff3a      @ sasx  pc, r12, r10")
 711        TEST_RR(    "ssax       r0, r",0,  HH1,", r",1, HH2,"")
 712        TEST_RR(    "ssax       r14, r",12,HH2,", r",10,HH1,"")
 713        TEST_UNSUPPORTED(".word 0xe61cff5a      @ ssax  pc, r12, r10")
 714        TEST_RR(    "ssub16     r0, r",0,  HH1,", r",1, HH2,"")
 715        TEST_RR(    "ssub16     r14, r",12,HH2,", r",10,HH1,"")
 716        TEST_UNSUPPORTED(".word 0xe61cff7a      @ ssub16        pc, r12, r10")
 717        TEST_RR(    "sadd8      r0, r",0,  HH1,", r",1, HH2,"")
 718        TEST_RR(    "sadd8      r14, r",12,HH2,", r",10,HH1,"")
 719        TEST_UNSUPPORTED(".word 0xe61cff9a      @ sadd8 pc, r12, r10")
 720        TEST_UNSUPPORTED(".word 0xe61000b0") /* Unallocated space */
 721        TEST_UNSUPPORTED(".word 0xe61fffbf") /* Unallocated space */
 722        TEST_UNSUPPORTED(".word 0xe61000d0") /* Unallocated space */
 723        TEST_UNSUPPORTED(".word 0xe61fffdf") /* Unallocated space */
 724        TEST_RR(    "ssub8      r0, r",0,  HH1,", r",1, HH2,"")
 725        TEST_RR(    "ssub8      r14, r",12,HH2,", r",10,HH1,"")
 726        TEST_UNSUPPORTED(".word 0xe61cfffa      @ ssub8 pc, r12, r10")
 727
 728        TEST_RR(    "qadd16     r0, r",0,  HH1,", r",1, HH2,"")
 729        TEST_RR(    "qadd16     r14, r",12,HH2,", r",10,HH1,"")
 730        TEST_UNSUPPORTED(".word 0xe62cff1a      @ qadd16        pc, r12, r10")
 731        TEST_RR(    "qasx       r0, r",0,  HH1,", r",1, HH2,"")
 732        TEST_RR(    "qasx       r14, r",12,HH2,", r",10,HH1,"")
 733        TEST_UNSUPPORTED(".word 0xe62cff3a      @ qasx  pc, r12, r10")
 734        TEST_RR(    "qsax       r0, r",0,  HH1,", r",1, HH2,"")
 735        TEST_RR(    "qsax       r14, r",12,HH2,", r",10,HH1,"")
 736        TEST_UNSUPPORTED(".word 0xe62cff5a      @ qsax  pc, r12, r10")
 737        TEST_RR(    "qsub16     r0, r",0,  HH1,", r",1, HH2,"")
 738        TEST_RR(    "qsub16     r14, r",12,HH2,", r",10,HH1,"")
 739        TEST_UNSUPPORTED(".word 0xe62cff7a      @ qsub16        pc, r12, r10")
 740        TEST_RR(    "qadd8      r0, r",0,  HH1,", r",1, HH2,"")
 741        TEST_RR(    "qadd8      r14, r",12,HH2,", r",10,HH1,"")
 742        TEST_UNSUPPORTED(".word 0xe62cff9a      @ qadd8 pc, r12, r10")
 743        TEST_UNSUPPORTED(".word 0xe62000b0") /* Unallocated space */
 744        TEST_UNSUPPORTED(".word 0xe62fffbf") /* Unallocated space */
 745        TEST_UNSUPPORTED(".word 0xe62000d0") /* Unallocated space */
 746        TEST_UNSUPPORTED(".word 0xe62fffdf") /* Unallocated space */
 747        TEST_RR(    "qsub8      r0, r",0,  HH1,", r",1, HH2,"")
 748        TEST_RR(    "qsub8      r14, r",12,HH2,", r",10,HH1,"")
 749        TEST_UNSUPPORTED(".word 0xe62cfffa      @ qsub8 pc, r12, r10")
 750
 751        TEST_RR(    "shadd16    r0, r",0,  HH1,", r",1, HH2,"")
 752        TEST_RR(    "shadd16    r14, r",12,HH2,", r",10,HH1,"")
 753        TEST_UNSUPPORTED(".word 0xe63cff1a      @ shadd16       pc, r12, r10")
 754        TEST_RR(    "shasx      r0, r",0,  HH1,", r",1, HH2,"")
 755        TEST_RR(    "shasx      r14, r",12,HH2,", r",10,HH1,"")
 756        TEST_UNSUPPORTED(".word 0xe63cff3a      @ shasx pc, r12, r10")
 757        TEST_RR(    "shsax      r0, r",0,  HH1,", r",1, HH2,"")
 758        TEST_RR(    "shsax      r14, r",12,HH2,", r",10,HH1,"")
 759        TEST_UNSUPPORTED(".word 0xe63cff5a      @ shsax pc, r12, r10")
 760        TEST_RR(    "shsub16    r0, r",0,  HH1,", r",1, HH2,"")
 761        TEST_RR(    "shsub16    r14, r",12,HH2,", r",10,HH1,"")
 762        TEST_UNSUPPORTED(".word 0xe63cff7a      @ shsub16       pc, r12, r10")
 763        TEST_RR(    "shadd8     r0, r",0,  HH1,", r",1, HH2,"")
 764        TEST_RR(    "shadd8     r14, r",12,HH2,", r",10,HH1,"")
 765        TEST_UNSUPPORTED(".word 0xe63cff9a      @ shadd8        pc, r12, r10")
 766        TEST_UNSUPPORTED(".word 0xe63000b0") /* Unallocated space */
 767        TEST_UNSUPPORTED(".word 0xe63fffbf") /* Unallocated space */
 768        TEST_UNSUPPORTED(".word 0xe63000d0") /* Unallocated space */
 769        TEST_UNSUPPORTED(".word 0xe63fffdf") /* Unallocated space */
 770        TEST_RR(    "shsub8     r0, r",0,  HH1,", r",1, HH2,"")
 771        TEST_RR(    "shsub8     r14, r",12,HH2,", r",10,HH1,"")
 772        TEST_UNSUPPORTED(".word 0xe63cfffa      @ shsub8        pc, r12, r10")
 773
 774        TEST_GROUP("Parallel addition and subtraction, unsigned")
 775
 776        TEST_UNSUPPORTED(".word 0xe6400010") /* Unallocated space */
 777        TEST_UNSUPPORTED(".word 0xe64fffff") /* Unallocated space */
 778
 779        TEST_RR(    "uadd16     r0, r",0,  HH1,", r",1, HH2,"")
 780        TEST_RR(    "uadd16     r14, r",12,HH2,", r",10,HH1,"")
 781        TEST_UNSUPPORTED(".word 0xe65cff1a      @ uadd16        pc, r12, r10")
 782        TEST_RR(    "uasx       r0, r",0,  HH1,", r",1, HH2,"")
 783        TEST_RR(    "uasx       r14, r",12,HH2,", r",10,HH1,"")
 784        TEST_UNSUPPORTED(".word 0xe65cff3a      @ uasx  pc, r12, r10")
 785        TEST_RR(    "usax       r0, r",0,  HH1,", r",1, HH2,"")
 786        TEST_RR(    "usax       r14, r",12,HH2,", r",10,HH1,"")
 787        TEST_UNSUPPORTED(".word 0xe65cff5a      @ usax  pc, r12, r10")
 788        TEST_RR(    "usub16     r0, r",0,  HH1,", r",1, HH2,"")
 789        TEST_RR(    "usub16     r14, r",12,HH2,", r",10,HH1,"")
 790        TEST_UNSUPPORTED(".word 0xe65cff7a      @ usub16        pc, r12, r10")
 791        TEST_RR(    "uadd8      r0, r",0,  HH1,", r",1, HH2,"")
 792        TEST_RR(    "uadd8      r14, r",12,HH2,", r",10,HH1,"")
 793        TEST_UNSUPPORTED(".word 0xe65cff9a      @ uadd8 pc, r12, r10")
 794        TEST_UNSUPPORTED(".word 0xe65000b0") /* Unallocated space */
 795        TEST_UNSUPPORTED(".word 0xe65fffbf") /* Unallocated space */
 796        TEST_UNSUPPORTED(".word 0xe65000d0") /* Unallocated space */
 797        TEST_UNSUPPORTED(".word 0xe65fffdf") /* Unallocated space */
 798        TEST_RR(    "usub8      r0, r",0,  HH1,", r",1, HH2,"")
 799        TEST_RR(    "usub8      r14, r",12,HH2,", r",10,HH1,"")
 800        TEST_UNSUPPORTED(".word 0xe65cfffa      @ usub8 pc, r12, r10")
 801
 802        TEST_RR(    "uqadd16    r0, r",0,  HH1,", r",1, HH2,"")
 803        TEST_RR(    "uqadd16    r14, r",12,HH2,", r",10,HH1,"")
 804        TEST_UNSUPPORTED(".word 0xe66cff1a      @ uqadd16       pc, r12, r10")
 805        TEST_RR(    "uqasx      r0, r",0,  HH1,", r",1, HH2,"")
 806        TEST_RR(    "uqasx      r14, r",12,HH2,", r",10,HH1,"")
 807        TEST_UNSUPPORTED(".word 0xe66cff3a      @ uqasx pc, r12, r10")
 808        TEST_RR(    "uqsax      r0, r",0,  HH1,", r",1, HH2,"")
 809        TEST_RR(    "uqsax      r14, r",12,HH2,", r",10,HH1,"")
 810        TEST_UNSUPPORTED(".word 0xe66cff5a      @ uqsax pc, r12, r10")
 811        TEST_RR(    "uqsub16    r0, r",0,  HH1,", r",1, HH2,"")
 812        TEST_RR(    "uqsub16    r14, r",12,HH2,", r",10,HH1,"")
 813        TEST_UNSUPPORTED(".word 0xe66cff7a      @ uqsub16       pc, r12, r10")
 814        TEST_RR(    "uqadd8     r0, r",0,  HH1,", r",1, HH2,"")
 815        TEST_RR(    "uqadd8     r14, r",12,HH2,", r",10,HH1,"")
 816        TEST_UNSUPPORTED(".word 0xe66cff9a      @ uqadd8        pc, r12, r10")
 817        TEST_UNSUPPORTED(".word 0xe66000b0") /* Unallocated space */
 818        TEST_UNSUPPORTED(".word 0xe66fffbf") /* Unallocated space */
 819        TEST_UNSUPPORTED(".word 0xe66000d0") /* Unallocated space */
 820        TEST_UNSUPPORTED(".word 0xe66fffdf") /* Unallocated space */
 821        TEST_RR(    "uqsub8     r0, r",0,  HH1,", r",1, HH2,"")
 822        TEST_RR(    "uqsub8     r14, r",12,HH2,", r",10,HH1,"")
 823        TEST_UNSUPPORTED(".word 0xe66cfffa      @ uqsub8        pc, r12, r10")
 824
 825        TEST_RR(    "uhadd16    r0, r",0,  HH1,", r",1, HH2,"")
 826        TEST_RR(    "uhadd16    r14, r",12,HH2,", r",10,HH1,"")
 827        TEST_UNSUPPORTED(".word 0xe67cff1a      @ uhadd16       pc, r12, r10")
 828        TEST_RR(    "uhasx      r0, r",0,  HH1,", r",1, HH2,"")
 829        TEST_RR(    "uhasx      r14, r",12,HH2,", r",10,HH1,"")
 830        TEST_UNSUPPORTED(".word 0xe67cff3a      @ uhasx pc, r12, r10")
 831        TEST_RR(    "uhsax      r0, r",0,  HH1,", r",1, HH2,"")
 832        TEST_RR(    "uhsax      r14, r",12,HH2,", r",10,HH1,"")
 833        TEST_UNSUPPORTED(".word 0xe67cff5a      @ uhsax pc, r12, r10")
 834        TEST_RR(    "uhsub16    r0, r",0,  HH1,", r",1, HH2,"")
 835        TEST_RR(    "uhsub16    r14, r",12,HH2,", r",10,HH1,"")
 836        TEST_UNSUPPORTED(".word 0xe67cff7a      @ uhsub16       pc, r12, r10")
 837        TEST_RR(    "uhadd8     r0, r",0,  HH1,", r",1, HH2,"")
 838        TEST_RR(    "uhadd8     r14, r",12,HH2,", r",10,HH1,"")
 839        TEST_UNSUPPORTED(".word 0xe67cff9a      @ uhadd8        pc, r12, r10")
 840        TEST_UNSUPPORTED(".word 0xe67000b0") /* Unallocated space */
 841        TEST_UNSUPPORTED(".word 0xe67fffbf") /* Unallocated space */
 842        TEST_UNSUPPORTED(".word 0xe67000d0") /* Unallocated space */
 843        TEST_UNSUPPORTED(".word 0xe67fffdf") /* Unallocated space */
 844        TEST_RR(    "uhsub8     r0, r",0,  HH1,", r",1, HH2,"")
 845        TEST_RR(    "uhsub8     r14, r",12,HH2,", r",10,HH1,"")
 846        TEST_UNSUPPORTED(".word 0xe67cfffa      @ uhsub8        pc, r12, r10")
 847        TEST_UNSUPPORTED(".word 0xe67feffa      @ uhsub8        r14, pc, r10")
 848        TEST_UNSUPPORTED(".word 0xe67cefff      @ uhsub8        r14, r12, pc")
 849#endif /* __LINUX_ARM_ARCH__ >= 7 */
 850
 851#if __LINUX_ARM_ARCH__ >= 6
 852        TEST_GROUP("Packing, unpacking, saturation, and reversal")
 853
 854        TEST_RR(    "pkhbt      r0, r",0,  HH1,", r",1, HH2,"")
 855        TEST_RR(    "pkhbt      r14,r",12, HH1,", r",10,HH2,", lsl #2")
 856        TEST_UNSUPPORTED(".word 0xe68cf11a      @ pkhbt pc, r12, r10, lsl #2")
 857        TEST_RR(    "pkhtb      r0, r",0,  HH1,", r",1, HH2,"")
 858        TEST_RR(    "pkhtb      r14,r",12, HH1,", r",10,HH2,", asr #2")
 859        TEST_UNSUPPORTED(".word 0xe68cf15a      @ pkhtb pc, r12, r10, asr #2")
 860        TEST_UNSUPPORTED(".word 0xe68fe15a      @ pkhtb r14, pc, r10, asr #2")
 861        TEST_UNSUPPORTED(".word 0xe68ce15f      @ pkhtb r14, r12, pc, asr #2")
 862        TEST_UNSUPPORTED(".word 0xe6900010") /* Unallocated space */
 863        TEST_UNSUPPORTED(".word 0xe69fffdf") /* Unallocated space */
 864
 865        TEST_R(     "ssat       r0, #24, r",0,   VAL1,"")
 866        TEST_R(     "ssat       r14, #24, r",12, VAL2,"")
 867        TEST_R(     "ssat       r0, #24, r",0,   VAL1,", lsl #8")
 868        TEST_R(     "ssat       r14, #24, r",12, VAL2,", asr #8")
 869        TEST_UNSUPPORTED(".word 0xe6b7f01c      @ ssat  pc, #24, r12")
 870
 871        TEST_R(     "usat       r0, #24, r",0,   VAL1,"")
 872        TEST_R(     "usat       r14, #24, r",12, VAL2,"")
 873        TEST_R(     "usat       r0, #24, r",0,   VAL1,", lsl #8")
 874        TEST_R(     "usat       r14, #24, r",12, VAL2,", asr #8")
 875        TEST_UNSUPPORTED(".word 0xe6f7f01c      @ usat  pc, #24, r12")
 876
 877        TEST_RR(    "sxtab16    r0, r",0,  HH1,", r",1, HH2,"")
 878        TEST_RR(    "sxtab16    r14,r",12, HH2,", r",10,HH1,", ror #8")
 879        TEST_R(     "sxtb16     r8, r",7,  HH1,"")
 880        TEST_UNSUPPORTED(".word 0xe68cf47a      @ sxtab16       pc,r12, r10, ror #8")
 881
 882        TEST_RR(    "sel        r0, r",0,  VAL1,", r",1, VAL2,"")
 883        TEST_RR(    "sel        r14, r",12,VAL1,", r",10, VAL2,"")
 884        TEST_UNSUPPORTED(".word 0xe68cffba      @ sel   pc, r12, r10")
 885        TEST_UNSUPPORTED(".word 0xe68fefba      @ sel   r14, pc, r10")
 886        TEST_UNSUPPORTED(".word 0xe68cefbf      @ sel   r14, r12, pc")
 887
 888        TEST_R(     "ssat16     r0, #12, r",0,   HH1,"")
 889        TEST_R(     "ssat16     r14, #12, r",12, HH2,"")
 890        TEST_UNSUPPORTED(".word 0xe6abff3c      @ ssat16        pc, #12, r12")
 891
 892        TEST_RR(    "sxtab      r0, r",0,  HH1,", r",1, HH2,"")
 893        TEST_RR(    "sxtab      r14,r",12, HH2,", r",10,HH1,", ror #8")
 894        TEST_R(     "sxtb       r8, r",7,  HH1,"")
 895        TEST_UNSUPPORTED(".word 0xe6acf47a      @ sxtab pc,r12, r10, ror #8")
 896
 897        TEST_R(     "rev        r0, r",0,   VAL1,"")
 898        TEST_R(     "rev        r14, r",12, VAL2,"")
 899        TEST_UNSUPPORTED(".word 0xe6bfff3c      @ rev   pc, r12")
 900
 901        TEST_RR(    "sxtah      r0, r",0,  HH1,", r",1, HH2,"")
 902        TEST_RR(    "sxtah      r14,r",12, HH2,", r",10,HH1,", ror #8")
 903        TEST_R(     "sxth       r8, r",7,  HH1,"")
 904        TEST_UNSUPPORTED(".word 0xe6bcf47a      @ sxtah pc,r12, r10, ror #8")
 905
 906        TEST_R(     "rev16      r0, r",0,   VAL1,"")
 907        TEST_R(     "rev16      r14, r",12, VAL2,"")
 908        TEST_UNSUPPORTED(".word 0xe6bfffbc      @ rev16 pc, r12")
 909
 910        TEST_RR(    "uxtab16    r0, r",0,  HH1,", r",1, HH2,"")
 911        TEST_RR(    "uxtab16    r14,r",12, HH2,", r",10,HH1,", ror #8")
 912        TEST_R(     "uxtb16     r8, r",7,  HH1,"")
 913        TEST_UNSUPPORTED(".word 0xe6ccf47a      @ uxtab16       pc,r12, r10, ror #8")
 914
 915        TEST_R(     "usat16     r0, #12, r",0,   HH1,"")
 916        TEST_R(     "usat16     r14, #12, r",12, HH2,"")
 917        TEST_UNSUPPORTED(".word 0xe6ecff3c      @ usat16        pc, #12, r12")
 918        TEST_UNSUPPORTED(".word 0xe6ecef3f      @ usat16        r14, #12, pc")
 919
 920        TEST_RR(    "uxtab      r0, r",0,  HH1,", r",1, HH2,"")
 921        TEST_RR(    "uxtab      r14,r",12, HH2,", r",10,HH1,", ror #8")
 922        TEST_R(     "uxtb       r8, r",7,  HH1,"")
 923        TEST_UNSUPPORTED(".word 0xe6ecf47a      @ uxtab pc,r12, r10, ror #8")
 924
 925#if __LINUX_ARM_ARCH__ >= 7
 926        TEST_R(     "rbit       r0, r",0,   VAL1,"")
 927        TEST_R(     "rbit       r14, r",12, VAL2,"")
 928        TEST_UNSUPPORTED(".word 0xe6ffff3c      @ rbit  pc, r12")
 929#endif
 930
 931        TEST_RR(    "uxtah      r0, r",0,  HH1,", r",1, HH2,"")
 932        TEST_RR(    "uxtah      r14,r",12, HH2,", r",10,HH1,", ror #8")
 933        TEST_R(     "uxth       r8, r",7,  HH1,"")
 934        TEST_UNSUPPORTED(".word 0xe6fff077      @ uxth  pc, r7")
 935        TEST_UNSUPPORTED(".word 0xe6ff807f      @ uxth  r8, pc")
 936        TEST_UNSUPPORTED(".word 0xe6fcf47a      @ uxtah pc, r12, r10, ror #8")
 937        TEST_UNSUPPORTED(".word 0xe6fce47f      @ uxtah r14, r12, pc, ror #8")
 938
 939        TEST_R(     "revsh      r0, r",0,   VAL1,"")
 940        TEST_R(     "revsh      r14, r",12, VAL2,"")
 941        TEST_UNSUPPORTED(".word 0xe6ffff3c      @ revsh pc, r12")
 942        TEST_UNSUPPORTED(".word 0xe6ffef3f      @ revsh r14, pc")
 943
 944        TEST_UNSUPPORTED(".word 0xe6900070") /* Unallocated space */
 945        TEST_UNSUPPORTED(".word 0xe69fff7f") /* Unallocated space */
 946
 947        TEST_UNSUPPORTED(".word 0xe6d00070") /* Unallocated space */
 948        TEST_UNSUPPORTED(".word 0xe6dfff7f") /* Unallocated space */
 949#endif /* __LINUX_ARM_ARCH__ >= 6 */
 950
 951#if __LINUX_ARM_ARCH__ >= 6
 952        TEST_GROUP("Signed multiplies")
 953
 954        TEST_RRR(   "smlad      r0, r",0,  HH1,", r",1, HH2,", r",2, VAL1,"")
 955        TEST_RRR(   "smlad      r14, r",12,HH2,", r",10,HH1,", r",8, VAL2,"")
 956        TEST_UNSUPPORTED(".word 0xe70f8a1c      @ smlad pc, r12, r10, r8")
 957        TEST_RRR(   "smladx     r0, r",0,  HH1,", r",1, HH2,", r",2, VAL1,"")
 958        TEST_RRR(   "smladx     r14, r",12,HH2,", r",10,HH1,", r",8, VAL2,"")
 959        TEST_UNSUPPORTED(".word 0xe70f8a3c      @ smladx        pc, r12, r10, r8")
 960
 961        TEST_RR(   "smuad       r0, r",0,  HH1,", r",1, HH2,"")
 962        TEST_RR(   "smuad       r14, r",12,HH2,", r",10,HH1,"")
 963        TEST_UNSUPPORTED(".word 0xe70ffa1c      @ smuad pc, r12, r10")
 964        TEST_RR(   "smuadx      r0, r",0,  HH1,", r",1, HH2,"")
 965        TEST_RR(   "smuadx      r14, r",12,HH2,", r",10,HH1,"")
 966        TEST_UNSUPPORTED(".word 0xe70ffa3c      @ smuadx        pc, r12, r10")
 967
 968        TEST_RRR(   "smlsd      r0, r",0,  HH1,", r",1, HH2,", r",2, VAL1,"")
 969        TEST_RRR(   "smlsd      r14, r",12,HH2,", r",10,HH1,", r",8, VAL2,"")
 970        TEST_UNSUPPORTED(".word 0xe70f8a5c      @ smlsd pc, r12, r10, r8")
 971        TEST_RRR(   "smlsdx     r0, r",0,  HH1,", r",1, HH2,", r",2, VAL1,"")
 972        TEST_RRR(   "smlsdx     r14, r",12,HH2,", r",10,HH1,", r",8, VAL2,"")
 973        TEST_UNSUPPORTED(".word 0xe70f8a7c      @ smlsdx        pc, r12, r10, r8")
 974
 975        TEST_RR(   "smusd       r0, r",0,  HH1,", r",1, HH2,"")
 976        TEST_RR(   "smusd       r14, r",12,HH2,", r",10,HH1,"")
 977        TEST_UNSUPPORTED(".word 0xe70ffa5c      @ smusd pc, r12, r10")
 978        TEST_RR(   "smusdx      r0, r",0,  HH1,", r",1, HH2,"")
 979        TEST_RR(   "smusdx      r14, r",12,HH2,", r",10,HH1,"")
 980        TEST_UNSUPPORTED(".word 0xe70ffa7c      @ smusdx        pc, r12, r10")
 981
 982        TEST_RRRR( "smlald      r",0, VAL1,", r",1, VAL2, ", r",0, HH1,", r",1, HH2)
 983        TEST_RRRR( "smlald      r",11,VAL2,", r",10,VAL1, ", r",9, HH2,", r",8, HH1)
 984        TEST_UNSUPPORTED(".word 0xe74af819      @ smlald        pc, r10, r9, r8")
 985        TEST_UNSUPPORTED(".word 0xe74fb819      @ smlald        r11, pc, r9, r8")
 986        TEST_UNSUPPORTED(".word 0xe74ab81f      @ smlald        r11, r10, pc, r8")
 987        TEST_UNSUPPORTED(".word 0xe74abf19      @ smlald        r11, r10, r9, pc")
 988
 989        TEST_RRRR( "smlaldx     r",0, VAL1,", r",1, VAL2, ", r",0, HH1,", r",1, HH2)
 990        TEST_RRRR( "smlaldx     r",11,VAL2,", r",10,VAL1, ", r",9, HH2,", r",8, HH1)
 991        TEST_UNSUPPORTED(".word 0xe74af839      @ smlaldx       pc, r10, r9, r8")
 992        TEST_UNSUPPORTED(".word 0xe74fb839      @ smlaldx       r11, pc, r9, r8")
 993
 994        TEST_RRR(  "smmla       r0, r",0,  VAL1,", r",1, VAL2,", r",2, VAL1,"")
 995        TEST_RRR(  "smmla       r14, r",12,VAL2,", r",10,VAL1,", r",8, VAL2,"")
 996        TEST_UNSUPPORTED(".word 0xe75f8a1c      @ smmla pc, r12, r10, r8")
 997        TEST_RRR(  "smmlar      r0, r",0,  VAL1,", r",1, VAL2,", r",2, VAL1,"")
 998        TEST_RRR(  "smmlar      r14, r",12,VAL2,", r",10,VAL1,", r",8, VAL2,"")
 999        TEST_UNSUPPORTED(".word 0xe75f8a3c      @ smmlar        pc, r12, r10, r8")
1000
1001        TEST_RR(   "smmul       r0, r",0,  VAL1,", r",1, VAL2,"")
1002        TEST_RR(   "smmul       r14, r",12,VAL2,", r",10,VAL1,"")
1003        TEST_UNSUPPORTED(".word 0xe75ffa1c      @ smmul pc, r12, r10")
1004        TEST_RR(   "smmulr      r0, r",0,  VAL1,", r",1, VAL2,"")
1005        TEST_RR(   "smmulr      r14, r",12,VAL2,", r",10,VAL1,"")
1006        TEST_UNSUPPORTED(".word 0xe75ffa3c      @ smmulr        pc, r12, r10")
1007
1008        TEST_RRR(  "smmls       r0, r",0,  VAL1,", r",1, VAL2,", r",2, VAL1,"")
1009        TEST_RRR(  "smmls       r14, r",12,VAL2,", r",10,VAL1,", r",8, VAL2,"")
1010        TEST_UNSUPPORTED(".word 0xe75f8adc      @ smmls pc, r12, r10, r8")
1011        TEST_RRR(  "smmlsr      r0, r",0,  VAL1,", r",1, VAL2,", r",2, VAL1,"")
1012        TEST_RRR(  "smmlsr      r14, r",12,VAL2,", r",10,VAL1,", r",8, VAL2,"")
1013        TEST_UNSUPPORTED(".word 0xe75f8afc      @ smmlsr        pc, r12, r10, r8")
1014        TEST_UNSUPPORTED(".word 0xe75e8aff      @ smmlsr        r14, pc, r10, r8")
1015        TEST_UNSUPPORTED(".word 0xe75e8ffc      @ smmlsr        r14, r12, pc, r8")
1016        TEST_UNSUPPORTED(".word 0xe75efafc      @ smmlsr        r14, r12, r10, pc")
1017
1018        TEST_RR(   "usad8       r0, r",0,  VAL1,", r",1, VAL2,"")
1019        TEST_RR(   "usad8       r14, r",12,VAL2,", r",10,VAL1,"")
1020        TEST_UNSUPPORTED(".word 0xe75ffa1c      @ usad8 pc, r12, r10")
1021        TEST_UNSUPPORTED(".word 0xe75efa1f      @ usad8 r14, pc, r10")
1022        TEST_UNSUPPORTED(".word 0xe75eff1c      @ usad8 r14, r12, pc")
1023
1024        TEST_RRR(  "usada8      r0, r",0,  VAL1,", r",1, VAL2,", r",2, VAL3,"")
1025        TEST_RRR(  "usada8      r14, r",12,VAL2,", r",10,VAL1,", r",8, VAL3,"")
1026        TEST_UNSUPPORTED(".word 0xe78f8a1c      @ usada8        pc, r12, r10, r8")
1027        TEST_UNSUPPORTED(".word 0xe78e8a1f      @ usada8        r14, pc, r10, r8")
1028        TEST_UNSUPPORTED(".word 0xe78e8f1c      @ usada8        r14, r12, pc, r8")
1029#endif /* __LINUX_ARM_ARCH__ >= 6 */
1030
1031#if __LINUX_ARM_ARCH__ >= 7
1032        TEST_GROUP("Bit Field")
1033
1034        TEST_R(     "sbfx       r0, r",0  , VAL1,", #0, #31")
1035        TEST_R(     "sbfxeq     r14, r",12, VAL2,", #8, #16")
1036        TEST_R(     "sbfx       r4, r",10,  VAL1,", #16, #15")
1037        TEST_UNSUPPORTED(".word 0xe7aff45c      @ sbfx  pc, r12, #8, #16")
1038
1039        TEST_R(     "ubfx       r0, r",0  , VAL1,", #0, #31")
1040        TEST_R(     "ubfxcs     r14, r",12, VAL2,", #8, #16")
1041        TEST_R(     "ubfx       r4, r",10,  VAL1,", #16, #15")
1042        TEST_UNSUPPORTED(".word 0xe7eff45c      @ ubfx  pc, r12, #8, #16")
1043        TEST_UNSUPPORTED(".word 0xe7efc45f      @ ubfx  r12, pc, #8, #16")
1044
1045        TEST_R(     "bfc        r",0, VAL1,", #4, #20")
1046        TEST_R(     "bfcvs      r",14,VAL2,", #4, #20")
1047        TEST_R(     "bfc        r",7, VAL1,", #0, #31")
1048        TEST_R(     "bfc        r",8, VAL2,", #0, #31")
1049        TEST_UNSUPPORTED(".word 0xe7def01f      @ bfc   pc, #0, #31");
1050
1051        TEST_RR(    "bfi        r",0, VAL1,", r",0  , VAL2,", #0, #31")
1052        TEST_RR(    "bfipl      r",12,VAL1,", r",14 , VAL2,", #4, #20")
1053        TEST_UNSUPPORTED(".word 0xe7d7f21e      @ bfi   pc, r14, #4, #20")
1054
1055        TEST_UNSUPPORTED(".word 0x07f000f0")  /* Permanently UNDEFINED */
1056        TEST_UNSUPPORTED(".word 0x07ffffff")  /* Permanently UNDEFINED */
1057#endif /* __LINUX_ARM_ARCH__ >= 6 */
1058
1059        TEST_GROUP("Branch, branch with link, and block data transfer")
1060
1061        TEST_P(   "stmda        r",0, 16*4,", {r0}")
1062        TEST_P(   "stmeqda      r",4, 16*4,", {r0-r15}")
1063        TEST_P(   "stmneda      r",8, 16*4,"!, {r8-r15}")
1064        TEST_P(   "stmda        r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
1065        TEST_P(   "stmda        r",13,0,   "!, {pc}")
1066
1067        TEST_P(   "ldmda        r",0, 16*4,", {r0}")
1068        TEST_BF_P("ldmcsda      r",4, 15*4,", {r0-r15}")
1069        TEST_BF_P("ldmccda      r",7, 15*4,"!, {r8-r15}")
1070        TEST_P(   "ldmda        r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
1071        TEST_BF_P("ldmda        r",14,15*4,"!, {pc}")
1072
1073        TEST_P(   "stmia        r",0, 16*4,", {r0}")
1074        TEST_P(   "stmmiia      r",4, 16*4,", {r0-r15}")
1075        TEST_P(   "stmplia      r",8, 16*4,"!, {r8-r15}")
1076        TEST_P(   "stmia        r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
1077        TEST_P(   "stmia        r",14,0,   "!, {pc}")
1078
1079        TEST_P(   "ldmia        r",0, 16*4,", {r0}")
1080        TEST_BF_P("ldmvsia      r",4, 0,   ", {r0-r15}")
1081        TEST_BF_P("ldmvcia      r",7, 8*4, "!, {r8-r15}")
1082        TEST_P(   "ldmia        r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
1083        TEST_BF_P("ldmia        r",14,15*4,"!, {pc}")
1084
1085        TEST_P(   "stmdb        r",0, 16*4,", {r0}")
1086        TEST_P(   "stmhidb      r",4, 16*4,", {r0-r15}")
1087        TEST_P(   "stmlsdb      r",8, 16*4,"!, {r8-r15}")
1088        TEST_P(   "stmdb        r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
1089        TEST_P(   "stmdb        r",13,4,   "!, {pc}")
1090
1091        TEST_P(   "ldmdb        r",0, 16*4,", {r0}")
1092        TEST_BF_P("ldmgedb      r",4, 16*4,", {r0-r15}")
1093        TEST_BF_P("ldmltdb      r",7, 16*4,"!, {r8-r15}")
1094        TEST_P(   "ldmdb        r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
1095        TEST_BF_P("ldmdb        r",14,16*4,"!, {pc}")
1096
1097        TEST_P(   "stmib        r",0, 16*4,", {r0}")
1098        TEST_P(   "stmgtib      r",4, 16*4,", {r0-r15}")
1099        TEST_P(   "stmleib      r",8, 16*4,"!, {r8-r15}")
1100        TEST_P(   "stmib        r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
1101        TEST_P(   "stmib        r",13,-4,  "!, {pc}")
1102
1103        TEST_P(   "ldmib        r",0, 16*4,", {r0}")
1104        TEST_BF_P("ldmeqib      r",4, -4,", {r0-r15}")
1105        TEST_BF_P("ldmneib      r",7, 7*4,"!, {r8-r15}")
1106        TEST_P(   "ldmib        r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
1107        TEST_BF_P("ldmib        r",14,14*4,"!, {pc}")
1108
1109        TEST_P(   "stmdb        r",13,16*4,"!, {r3-r12,lr}")
1110        TEST_P(   "stmeqdb      r",13,16*4,"!, {r3-r12}")
1111        TEST_P(   "stmnedb      r",2, 16*4,", {r3-r12,lr}")
1112        TEST_P(   "stmdb        r",13,16*4,"!, {r2-r12,lr}")
1113        TEST_P(   "stmdb        r",0, 16*4,", {r0-r12}")
1114        TEST_P(   "stmdb        r",0, 16*4,", {r0-r12,lr}")
1115
1116        TEST_BF_P("ldmia        r",13,5*4, "!, {r3-r12,pc}")
1117        TEST_P(   "ldmccia      r",13,5*4, "!, {r3-r12}")
1118        TEST_BF_P("ldmcsia      r",2, 5*4, "!, {r3-r12,pc}")
1119        TEST_BF_P("ldmia        r",13,4*4, "!, {r2-r12,pc}")
1120        TEST_P(   "ldmia        r",0, 16*4,", {r0-r12}")
1121        TEST_P(   "ldmia        r",0, 16*4,", {r0-r12,lr}")
1122
1123#ifdef CONFIG_THUMB2_KERNEL
1124        TEST_ARM_TO_THUMB_INTERWORK_P("ldmplia  r",0,15*4,", {pc}")
1125        TEST_ARM_TO_THUMB_INTERWORK_P("ldmmiia  r",13,0,", {r0-r15}")
1126#endif
1127        TEST_BF("b      2f")
1128        TEST_BF("bl     2f")
1129        TEST_BB("b      2b")
1130        TEST_BB("bl     2b")
1131
1132        TEST_BF("beq    2f")
1133        TEST_BF("bleq   2f")
1134        TEST_BB("bne    2b")
1135        TEST_BB("blne   2b")
1136
1137        TEST_BF("bgt    2f")
1138        TEST_BF("blgt   2f")
1139        TEST_BB("blt    2b")
1140        TEST_BB("bllt   2b")
1141
1142        TEST_GROUP("Supervisor Call, and coprocessor instructions")
1143
1144        /*
1145         * We can't really test these by executing them, so all
1146         * we can do is check that probes are, or are not allowed.
1147         * At the moment none are allowed...
1148         */
1149#define TEST_COPROCESSOR(code) TEST_UNSUPPORTED(code)
1150
1151#define COPROCESSOR_INSTRUCTIONS_ST_LD(two,cc)                                  \
1152        TEST_COPROCESSOR("stc"two"      0, cr0, [r13, #4]")                     \
1153        TEST_COPROCESSOR("stc"two"      0, cr0, [r13, #-4]")                    \
1154        TEST_COPROCESSOR("stc"two"      0, cr0, [r13, #4]!")                    \
1155        TEST_COPROCESSOR("stc"two"      0, cr0, [r13, #-4]!")                   \
1156        TEST_COPROCESSOR("stc"two"      0, cr0, [r13], #4")                     \
1157        TEST_COPROCESSOR("stc"two"      0, cr0, [r13], #-4")                    \
1158        TEST_COPROCESSOR("stc"two"      0, cr0, [r13], {1}")                    \
1159        TEST_COPROCESSOR("stc"two"l     0, cr0, [r13, #4]")                     \
1160        TEST_COPROCESSOR("stc"two"l     0, cr0, [r13, #-4]")                    \
1161        TEST_COPROCESSOR("stc"two"l     0, cr0, [r13, #4]!")                    \
1162        TEST_COPROCESSOR("stc"two"l     0, cr0, [r13, #-4]!")                   \
1163        TEST_COPROCESSOR("stc"two"l     0, cr0, [r13], #4")                     \
1164        TEST_COPROCESSOR("stc"two"l     0, cr0, [r13], #-4")                    \
1165        TEST_COPROCESSOR("stc"two"l     0, cr0, [r13], {1}")                    \
1166        TEST_COPROCESSOR("ldc"two"      0, cr0, [r13, #4]")                     \
1167        TEST_COPROCESSOR("ldc"two"      0, cr0, [r13, #-4]")                    \
1168        TEST_COPROCESSOR("ldc"two"      0, cr0, [r13, #4]!")                    \
1169        TEST_COPROCESSOR("ldc"two"      0, cr0, [r13, #-4]!")                   \
1170        TEST_COPROCESSOR("ldc"two"      0, cr0, [r13], #4")                     \
1171        TEST_COPROCESSOR("ldc"two"      0, cr0, [r13], #-4")                    \
1172        TEST_COPROCESSOR("ldc"two"      0, cr0, [r13], {1}")                    \
1173        TEST_COPROCESSOR("ldc"two"l     0, cr0, [r13, #4]")                     \
1174        TEST_COPROCESSOR("ldc"two"l     0, cr0, [r13, #-4]")                    \
1175        TEST_COPROCESSOR("ldc"two"l     0, cr0, [r13, #4]!")                    \
1176        TEST_COPROCESSOR("ldc"two"l     0, cr0, [r13, #-4]!")                   \
1177        TEST_COPROCESSOR("ldc"two"l     0, cr0, [r13], #4")                     \
1178        TEST_COPROCESSOR("ldc"two"l     0, cr0, [r13], #-4")                    \
1179        TEST_COPROCESSOR("ldc"two"l     0, cr0, [r13], {1}")                    \
1180                                                                                \
1181        TEST_COPROCESSOR( "stc"two"     0, cr0, [r15, #4]")                     \
1182        TEST_COPROCESSOR( "stc"two"     0, cr0, [r15, #-4]")                    \
1183        TEST_UNSUPPORTED(".word 0x"cc"daf0001   @ stc"two"      0, cr0, [r15, #4]!")    \
1184        TEST_UNSUPPORTED(".word 0x"cc"d2f0001   @ stc"two"      0, cr0, [r15, #-4]!")   \
1185        TEST_UNSUPPORTED(".word 0x"cc"caf0001   @ stc"two"      0, cr0, [r15], #4")     \
1186        TEST_UNSUPPORTED(".word 0x"cc"c2f0001   @ stc"two"      0, cr0, [r15], #-4")    \
1187        TEST_COPROCESSOR( "stc"two"     0, cr0, [r15], {1}")                    \
1188        TEST_COPROCESSOR( "stc"two"l    0, cr0, [r15, #4]")                     \
1189        TEST_COPROCESSOR( "stc"two"l    0, cr0, [r15, #-4]")                    \
1190        TEST_UNSUPPORTED(".word 0x"cc"def0001   @ stc"two"l     0, cr0, [r15, #4]!")    \
1191        TEST_UNSUPPORTED(".word 0x"cc"d6f0001   @ stc"two"l     0, cr0, [r15, #-4]!")   \
1192        TEST_UNSUPPORTED(".word 0x"cc"cef0001   @ stc"two"l     0, cr0, [r15], #4")     \
1193        TEST_UNSUPPORTED(".word 0x"cc"c6f0001   @ stc"two"l     0, cr0, [r15], #-4")    \
1194        TEST_COPROCESSOR( "stc"two"l    0, cr0, [r15], {1}")                    \
1195        TEST_COPROCESSOR( "ldc"two"     0, cr0, [r15, #4]")                     \
1196        TEST_COPROCESSOR( "ldc"two"     0, cr0, [r15, #-4]")                    \
1197        TEST_UNSUPPORTED(".word 0x"cc"dbf0001   @ ldc"two"      0, cr0, [r15, #4]!")    \
1198        TEST_UNSUPPORTED(".word 0x"cc"d3f0001   @ ldc"two"      0, cr0, [r15, #-4]!")   \
1199        TEST_UNSUPPORTED(".word 0x"cc"cbf0001   @ ldc"two"      0, cr0, [r15], #4")     \
1200        TEST_UNSUPPORTED(".word 0x"cc"c3f0001   @ ldc"two"      0, cr0, [r15], #-4")    \
1201        TEST_COPROCESSOR( "ldc"two"     0, cr0, [r15], {1}")                    \
1202        TEST_COPROCESSOR( "ldc"two"l    0, cr0, [r15, #4]")                     \
1203        TEST_COPROCESSOR( "ldc"two"l    0, cr0, [r15, #-4]")                    \
1204        TEST_UNSUPPORTED(".word 0x"cc"dff0001   @ ldc"two"l     0, cr0, [r15, #4]!")    \
1205        TEST_UNSUPPORTED(".word 0x"cc"d7f0001   @ ldc"two"l     0, cr0, [r15, #-4]!")   \
1206        TEST_UNSUPPORTED(".word 0x"cc"cff0001   @ ldc"two"l     0, cr0, [r15], #4")     \
1207        TEST_UNSUPPORTED(".word 0x"cc"c7f0001   @ ldc"two"l     0, cr0, [r15], #-4")    \
1208        TEST_COPROCESSOR( "ldc"two"l    0, cr0, [r15], {1}")
1209
1210#define COPROCESSOR_INSTRUCTIONS_MC_MR(two,cc)                                  \
1211                                                                                \
1212        TEST_COPROCESSOR( "mcrr"two"    0, 15, r0, r14, cr0")                   \
1213        TEST_COPROCESSOR( "mcrr"two"    15, 0, r14, r0, cr15")                  \
1214        TEST_UNSUPPORTED(".word 0x"cc"c4f00f0   @ mcrr"two"     0, 15, r0, r15, cr0")   \
1215        TEST_UNSUPPORTED(".word 0x"cc"c40ff0f   @ mcrr"two"     15, 0, r15, r0, cr15")  \
1216        TEST_COPROCESSOR( "mrrc"two"    0, 15, r0, r14, cr0")                   \
1217        TEST_COPROCESSOR( "mrrc"two"    15, 0, r14, r0, cr15")                  \
1218        TEST_UNSUPPORTED(".word 0x"cc"c5f00f0   @ mrrc"two"     0, 15, r0, r15, cr0")   \
1219        TEST_UNSUPPORTED(".word 0x"cc"c50ff0f   @ mrrc"two"     15, 0, r15, r0, cr15")  \
1220        TEST_COPROCESSOR( "cdp"two"     15, 15, cr15, cr15, cr15, 7")           \
1221        TEST_COPROCESSOR( "cdp"two"     0, 0, cr0, cr0, cr0, 0")                \
1222        TEST_COPROCESSOR( "mcr"two"     15, 7, r15, cr15, cr15, 7")             \
1223        TEST_COPROCESSOR( "mcr"two"     0, 0, r0, cr0, cr0, 0")                 \
1224        TEST_COPROCESSOR( "mrc"two"     15, 7, r15, cr15, cr15, 7")             \
1225        TEST_COPROCESSOR( "mrc"two"     0, 0, r0, cr0, cr0, 0")
1226
1227        COPROCESSOR_INSTRUCTIONS_ST_LD("","e")
1228        COPROCESSOR_INSTRUCTIONS_MC_MR("","e")
1229        TEST_UNSUPPORTED("svc   0")
1230        TEST_UNSUPPORTED("svc   0xffffff")
1231
1232        TEST_UNSUPPORTED("svc   0")
1233
1234        TEST_GROUP("Unconditional instruction")
1235
1236#if __LINUX_ARM_ARCH__ >= 6
1237        TEST_UNSUPPORTED("srsda sp, 0x13")
1238        TEST_UNSUPPORTED("srsdb sp, 0x13")
1239        TEST_UNSUPPORTED("srsia sp, 0x13")
1240        TEST_UNSUPPORTED("srsib sp, 0x13")
1241        TEST_UNSUPPORTED("srsda sp!, 0x13")
1242        TEST_UNSUPPORTED("srsdb sp!, 0x13")
1243        TEST_UNSUPPORTED("srsia sp!, 0x13")
1244        TEST_UNSUPPORTED("srsib sp!, 0x13")
1245
1246        TEST_UNSUPPORTED("rfeda sp")
1247        TEST_UNSUPPORTED("rfedb sp")
1248        TEST_UNSUPPORTED("rfeia sp")
1249        TEST_UNSUPPORTED("rfeib sp")
1250        TEST_UNSUPPORTED("rfeda sp!")
1251        TEST_UNSUPPORTED("rfedb sp!")
1252        TEST_UNSUPPORTED("rfeia sp!")
1253        TEST_UNSUPPORTED("rfeib sp!")
1254        TEST_UNSUPPORTED(".word 0xf81d0a00      @ rfeda pc")
1255        TEST_UNSUPPORTED(".word 0xf91d0a00      @ rfedb pc")
1256        TEST_UNSUPPORTED(".word 0xf89d0a00      @ rfeia pc")
1257        TEST_UNSUPPORTED(".word 0xf99d0a00      @ rfeib pc")
1258        TEST_UNSUPPORTED(".word 0xf83d0a00      @ rfeda pc!")
1259        TEST_UNSUPPORTED(".word 0xf93d0a00      @ rfedb pc!")
1260        TEST_UNSUPPORTED(".word 0xf8bd0a00      @ rfeia pc!")
1261        TEST_UNSUPPORTED(".word 0xf9bd0a00      @ rfeib pc!")
1262#endif /* __LINUX_ARM_ARCH__ >= 6 */
1263
1264#if __LINUX_ARM_ARCH__ >= 6
1265        TEST_X( "blx    __dummy_thumb_subroutine_even",
1266                ".thumb                         \n\t"
1267                ".space 4                       \n\t"
1268                ".type __dummy_thumb_subroutine_even, %%function \n\t"
1269                "__dummy_thumb_subroutine_even: \n\t"
1270                "mov    r0, pc                  \n\t"
1271                "bx     lr                      \n\t"
1272                ".arm                           \n\t"
1273        )
1274        TEST(   "blx    __dummy_thumb_subroutine_even")
1275
1276        TEST_X( "blx    __dummy_thumb_subroutine_odd",
1277                ".thumb                         \n\t"
1278                ".space 2                       \n\t"
1279                ".type __dummy_thumb_subroutine_odd, %%function \n\t"
1280                "__dummy_thumb_subroutine_odd:  \n\t"
1281                "mov    r0, pc                  \n\t"
1282                "bx     lr                      \n\t"
1283                ".arm                           \n\t"
1284        )
1285        TEST(   "blx    __dummy_thumb_subroutine_odd")
1286#endif /* __LINUX_ARM_ARCH__ >= 6 */
1287
1288        COPROCESSOR_INSTRUCTIONS_ST_LD("2","f")
1289#if __LINUX_ARM_ARCH__ >= 6
1290        COPROCESSOR_INSTRUCTIONS_MC_MR("2","f")
1291#endif
1292
1293        TEST_GROUP("Miscellaneous instructions, memory hints, and Advanced SIMD instructions")
1294
1295#if __LINUX_ARM_ARCH__ >= 6
1296        TEST_UNSUPPORTED("cps   0x13")
1297        TEST_UNSUPPORTED("cpsie i")
1298        TEST_UNSUPPORTED("cpsid i")
1299        TEST_UNSUPPORTED("cpsie i,0x13")
1300        TEST_UNSUPPORTED("cpsid i,0x13")
1301        TEST_UNSUPPORTED("setend        le")
1302        TEST_UNSUPPORTED("setend        be")
1303#endif
1304
1305#if __LINUX_ARM_ARCH__ >= 7
1306        TEST_P("pli     [r",0,0b,", #16]")
1307        TEST(  "pli     [pc, #0]")
1308        TEST_RR("pli    [r",12,0b,", r",0, 16,"]")
1309        TEST_RR("pli    [r",0, 0b,", -r",12,16,", lsl #4]")
1310#endif
1311
1312#if __LINUX_ARM_ARCH__ >= 5
1313        TEST_P("pld     [r",0,32,", #-16]")
1314        TEST(  "pld     [pc, #0]")
1315        TEST_PR("pld    [r",7, 24, ", r",0, 16,"]")
1316        TEST_PR("pld    [r",8, 24, ", -r",12,16,", lsl #4]")
1317#endif
1318
1319#if __LINUX_ARM_ARCH__ >= 7
1320        TEST_SUPPORTED(  ".word 0xf590f000      @ pldw [r0, #0]")
1321        TEST_SUPPORTED(  ".word 0xf797f000      @ pldw  [r7, r0]")
1322        TEST_SUPPORTED(  ".word 0xf798f18c      @ pldw  [r8, r12, lsl #3]");
1323#endif
1324
1325#if __LINUX_ARM_ARCH__ >= 7
1326        TEST_UNSUPPORTED("clrex")
1327        TEST_UNSUPPORTED("dsb")
1328        TEST_UNSUPPORTED("dmb")
1329        TEST_UNSUPPORTED("isb")
1330#endif
1331
1332        verbose("\n");
1333}
1334
1335