Home | History | Annotate | Download | only in config
      1 // Copyright 2016, VIXL authors
      2 // All rights reserved.
      3 //
      4 // Redistribution and use in source and binary forms, with or without
      5 // modification, are permitted provided that the following conditions are met:
      6 //
      7 //   * Redistributions of source code must retain the above copyright notice,
      8 //     this list of conditions and the following disclaimer.
      9 //   * Redistributions in binary form must reproduce the above copyright notice,
     10 //     this list of conditions and the following disclaimer in the documentation
     11 //     and/or other materials provided with the distribution.
     12 //   * Neither the name of ARM Limited nor the names of its contributors may be
     13 //     used to endorse or promote products derived from this software without
     14 //     specific prior written permission.
     15 //
     16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND
     17 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     18 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     19 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
     20 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     21 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     22 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
     23 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     24 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     25 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     26 
     27 // Test description for the MULS instruction with the following operands:
     28 //   MNEMONIC{<c>}.N <Rdm>, <Rn>, <Rdm>
     29 
     30 {
     31   "mnemonics": [
     32     "Mul", // MUL<c>{<q>} <Rdm>, <Rn>, {<Rdm>} ; T1
     33     "Muls" // MULS{<q>} <Rdm>, <Rn>, {<Rdm>} ; T1
     34   ],
     35   "description": {
     36     "operands": [
     37       {
     38         "name": "cond",
     39         "type": "Condition"
     40       },
     41       {
     42         "name": "rd",
     43         "type": "LowRegisters"
     44       },
     45       {
     46         "name": "rn",
     47         "type": "LowRegisters"
     48       },
     49       {
     50         "name": "rm",
     51         "type": "LowRegisters"
     52       }
     53     ],
     54     "inputs": [
     55       {
     56         "name": "apsr",
     57         "type": "NZCV"
     58       },
     59       {
     60         "name": "rd",
     61         "type": "Register"
     62       },
     63       {
     64         "name": "rn",
     65         "type": "Register"
     66       },
     67       {
     68         "name": "rm",
     69         "type": "Register"
     70       }
     71     ]
     72   },
     73   "test-files": [
     74     {
     75       "type": "assembler",
     76       "mnemonics": [
     77         "Muls" // MULS{<q>} <Rdm>, <Rn>, {<Rdm>} ; T1
     78       ],
     79       "test-cases": [
     80         {
     81           "name": "OutItBlock",
     82           "operands": [
     83             "cond", "rd", "rn", "rm"
     84           ],
     85           "operand-filter": "cond == 'al' and rd == rm"
     86         }
     87       ]
     88     },
     89     {
     90       "name": "in-it-block",
     91       "type": "assembler",
     92       "mnemonics": [
     93         "Mul" // MUL<c>{<q>} <Rdm>, <Rn>, {<Rdm>} ; T1
     94       ],
     95       "test-cases": [
     96         {
     97           "name": "InITBlock",
     98           "operands": [
     99             "cond", "rd", "rn", "rm"
    100           ],
    101           // Generate an extra IT instruction.
    102           "in-it-block": "{cond}",
    103           "operand-filter": "cond != 'al' and rd == rm"
    104         }
    105       ]
    106     },
    107     {
    108       "type": "simulator",
    109       "test-cases": [
    110         {
    111           "name": "Condition",
    112           "operands": [
    113             "cond"
    114           ],
    115           "inputs": [
    116             "apsr"
    117           ]
    118         },
    119         {
    120           "name": "Unconditional",
    121           "operands": [
    122             "cond", "rd", "rn", "rm"
    123           ],
    124           "inputs": [
    125             "cond", "rd", "rn", "rm"
    126           ],
    127           "operand-filter": "cond == 'al' and rd == rm",
    128           "operand-limit": 20,
    129           "input-filter": "rd == rm",
    130           "input-limit": 500
    131         }
    132       ]
    133     }
    134   ]
    135 }
    136