// Copyright 2016, VIXL authors
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
//   * Redistributions of source code must retain the above copyright notice,
//     this list of conditions and the following disclaimer.
//   * Redistributions in binary form must reproduce the above copyright notice,
//     this list of conditions and the following disclaimer in the documentation
//     and/or other materials provided with the distribution.
//   * Neither the name of ARM Limited nor the names of its contributors may be
//     used to endorse or promote products derived from this software without
//     specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

{
  "mnemonics": [
    "Ldr",  // LDR{<c>}{<q>} <Rt>, [<Rn>, {+/-}<Rm>{, <shift>}] ; A1
            // LDR{<c>}{<q>} <Rt>, [<Rn>], {+/-}<Rm>{, <shift>} ; A1
            // LDR{<c>}{<q>} <Rt>, [<Rn>, {+/-}<Rm>{, <shift>}]! ; A1
    "Ldrb", // LDRB{<c>}{<q>} <Rt>, [<Rn>, {+/-}<Rm>{, <shift>}] ; A1
            // LDRB{<c>}{<q>} <Rt>, [<Rn>], {+/-}<Rm>{, <shift>} ; A1
            // LDRB{<c>}{<q>} <Rt>, [<Rn>, {+/-}<Rm>{, <shift>}]! ; A1
    "Str",  // STR{<c>}{<q>} <Rt>, [<Rn>, {+/-}<Rm>{, <shift>}] ; A1
            // STR{<c>}{<q>} <Rt>, [<Rn>], {+/-}<Rm>{, <shift>} ; A1
            // STR{<c>}{<q>} <Rt>, [<Rn>, {+/-}<Rm>{, <shift>}]! ; A1
    "Strb"  // STRB{<c>}{<q>} <Rt>, [<Rn>, {+/-}<Rm>{, <shift>}] ; A1
            // STRB{<c>}{<q>} <Rt>, [<Rn>], {+/-}<Rm>{, <shift>} ; A1
            // STRB{<c>}{<q>} <Rt>, [<Rn>, {+/-}<Rm>{, <shift>}]! ; A1
  ],
  "description": {
    "operands": [
      {
        "name": "cond",
        "type": "Condition"
      },
      {
        "name": "rd",
        "type": "AllRegistersButPC"
      },
      {
        "name": "memop",
        "wrapper": "MemOperand",
        "operands": [
          {
            "name": "rn",
            "type": "AllRegistersButPC"
          },
          {
            "name": "sign",
            "type": "Sign"
          },
          {
            "name": "rm",
            "type": "AllRegistersButPC"
          },
          {
            "name": "shift",
            "type": "Shift1To31"
          },
          {
            "name": "amount",
            "type": "ShiftAmount1To31"
          },
          {
            "name": "addr_mode",
            "type": "AddressingMode"
          }
        ]
      }
    ],
    "inputs": [
      {
        "name": "apsr",
        "type": "NZCV"
      },
      {
        "name": "rd",
        "type": "Register"
      },
      {
        "name": "rm",
        "type": "RegisterOffsetLowerThan4096"
      },
      {
        "name": "memop",
        "type": "MemOperand"
      }
    ]
  },
  "test-files": [
    {
      "type": "assembler",
      "test-cases": [
        {
          "name": "Registers",
          "operands": [
            "cond", "rd", "rn", "rm"
          ],
          "operand-limit": 100
        },
        {
          "name": "MemOperandsOffset",
          "operands": [
            "rn", "sign", "rm", "shift", "amount", "addr_mode"
          ],
          "operand-filter": "addr_mode == 'Offset'",
          "operand-limit": 200
        },
        {
          "name": "MemOperandsWriteBack",
          "operands": [
            "rd", "rn", "sign", "rm", "shift", "amount", "addr_mode"
          ],
          "operand-filter": "addr_mode != 'Offset' and rd != rn",
          "operand-limit": 400
        }
      ]
    },
    {
      // TODO: The simulator tests do not support the case where `rd` ==
      // `rn`. See `data_types.MemOperand.Epilogue()` for details.
      "type": "simulator",
      "test-cases": [
        {
          "name": "Condition",
          "operands": [
            "cond", "rd", "rn", "rm"
          ],
          "operand-filter": "rd == 'r0' and rn == 'r1' and rm == 'r8'",
          "inputs": [
            "apsr"
          ]
        },
        {
          "name": "PositiveOffset",
          "operands": [
            "rd", "rn", "sign", "rm", "shift", "amount", "addr_mode"
          ],
          "operand-filter": "sign == 'plus' and addr_mode == 'Offset' and rd != rm and rd != rn and rn != rm",
          "operand-limit": 100,
          "inputs": [
            "memop", "rm"
          ],
          "input-limit": 10
        },
        {
          "name": "NegativeOffset",
          "operands": [
            "rd", "rn", "sign", "rm", "shift", "amount", "addr_mode"
          ],
          "operand-filter": "sign == 'minus' and addr_mode == 'Offset' and rd != rm and rd != rn and rn != rm",
          "operand-limit": 100,
          "inputs": [
            "memop", "rm"
          ],
          "input-limit": 10
        },
        {
          "name": "PositivePostIndex",
          "operands": [
            "rd", "rn", "sign", "rm", "shift", "amount", "addr_mode"
          ],
          "operand-filter": "sign == 'plus' and addr_mode == 'PostIndex' and rd != rm and rd != rn and rn != rm",
          "operand-limit": 100,
          "inputs": [
            "memop", "rm"
          ],
          "input-limit": 10
        },
        {
          "name": "NegativePostIndex",
          "operands": [
            "rd", "rn", "sign", "rm", "shift", "amount", "addr_mode"
          ],
          "operand-filter": "sign == 'minus' and addr_mode == 'PostIndex' and rd != rm and rd != rn and rn != rm",
          "operand-limit": 100,
          "inputs": [
            "memop", "rm"
          ],
          "input-limit": 10
        },
        {
          "name": "PositivePreIndex",
          "operands": [
            "rd", "rn", "sign", "rm", "shift", "amount", "addr_mode"
          ],
          "operand-filter": "sign == 'plus' and addr_mode == 'PreIndex' and rd != rm and rd != rn and rn != rm",
          "operand-limit": 100,
          "inputs": [
            "memop", "rm"
          ],
          "input-limit": 10
        },
        {
          "name": "NegativePreIndex",
          "operands": [
            "rd", "rn", "sign", "rm", "shift", "amount", "addr_mode"
          ],
          "operand-filter": "sign == 'minus' and addr_mode == 'PreIndex' and rd != rm and rd != rn and rn != rm",
          "operand-limit": 100,
          "inputs": [
            "memop", "rm"
          ],
          "input-limit": 10
        }
      ]
    }
  ]
}
