1658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat/* 2658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * Copyright (C) 2013 The Android Open Source Project 3658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * All rights reserved. 4658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * 5658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * Redistribution and use in source and binary forms, with or without 6658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * modification, are permitted provided that the following conditions 7658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * are met: 8658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * * Redistributions of source code must retain the above copyright 9658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * notice, this list of conditions and the following disclaimer. 10658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * * Redistributions in binary form must reproduce the above copyright 11658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * notice, this list of conditions and the following disclaimer in 12658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * the documentation and/or other materials provided with the 13658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * distribution. 14658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * 15658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat * SUCH DAMAGE. 27658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat */ 28658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 29658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#include <stdio.h> 30658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#include <stdlib.h> 31658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#include <string.h> 32658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#include <unistd.h> 33658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#include <errno.h> 34658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 35658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#include <sys/mman.h> 36658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#include <cutils/ashmem.h> 37658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 38658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#define __STDC_FORMAT_MACROS 39658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#include <inttypes.h> 40658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 41658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#include "codeflinger/ARMAssemblerInterface.h" 42d4146e6091d6ed947ce9edd0f8ef3e5fe066d716Colin Cross#include "codeflinger/Arm64Assembler.h" 43658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatusing namespace android; 44658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 45658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#define TESTS_DATAOP_ENABLE 1 46658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#define TESTS_DATATRANSFER_ENABLE 1 47658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#define TESTS_LDMSTM_ENABLE 1 48658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#define TESTS_REG_CORRUPTION_ENABLE 0 49658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 50658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatvoid *instrMem; 51658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatuint32_t instrMemSize = 128 * 1024; 52658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatchar dataMem[8192]; 53658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 54658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhattypedef void (*asm_function_t)(); 55658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatextern "C" void asm_test_jacket(asm_function_t function, 56658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat int64_t regs[], int32_t flags[]); 57658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 58658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#define MAX_32BIT (uint32_t)(((uint64_t)1 << 32) - 1) 59658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatconst uint32_t NA = 0; 60658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatconst uint32_t NUM_REGS = 32; 61658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatconst uint32_t NUM_FLAGS = 16; 62658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 63658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatenum instr_t 64658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat{ 65658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_ADD, 66658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_SUB, 67658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_AND, 68658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_ORR, 69658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_RSB, 70658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_BIC, 71658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_CMP, 72658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_MOV, 73658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_MVN, 74658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_MUL, 75658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_MLA, 76658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_SMULBB, 77658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_SMULBT, 78658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_SMULTB, 79658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_SMULTT, 80658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_SMULWB, 81658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_SMULWT, 82658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_SMLABB, 83658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_UXTB16, 84658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_UBFX, 85658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_ADDR_ADD, 86658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_ADDR_SUB, 87658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_LDR, 88658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_LDRB, 89658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_LDRH, 90658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_ADDR_LDR, 91658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_LDM, 92658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_STR, 93658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_STRB, 94658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_STRH, 95658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_ADDR_STR, 96658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat INSTR_STM 97658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat}; 98658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 99658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatenum shift_t 100658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat{ 101658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat SHIFT_LSL, 102658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat SHIFT_LSR, 103658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat SHIFT_ASR, 104658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat SHIFT_ROR, 105658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat SHIFT_NONE 106658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat}; 107658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 108658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatenum offset_t 109658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat{ 110658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat REG_SCALE_OFFSET, 111658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat REG_OFFSET, 112658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat IMM8_OFFSET, 113658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat IMM12_OFFSET, 114658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat NO_OFFSET 115658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat}; 116658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 117658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatenum cond_t 118658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat{ 119658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat EQ, NE, CS, CC, MI, PL, VS, VC, HI, LS, GE, LT, GT, LE, AL, NV, 120658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat HS = CS, 121658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat LO = CC 122658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat}; 123658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 124658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatconst char * cc_code[] = 125658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat{ 126658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat "EQ", "NE", "CS", "CC", "MI", "PL", "VS", "VC", 127658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat "HI", "LS","GE","LT", "GT", "LE", "AL", "NV" 128658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat}; 129658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 130658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 131658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatstruct dataOpTest_t 132658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat{ 133658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t id; 134658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat instr_t op; 135658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t preFlag; 136658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat cond_t cond; 137658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat bool setFlags; 138658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint64_t RnValue; 139658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint64_t RsValue; 140658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat bool immediate; 141658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t immValue; 142658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint64_t RmValue; 143658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t shiftMode; 144658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t shiftAmount; 145658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint64_t RdValue; 146658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat bool checkRd; 147658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint64_t postRdValue; 148658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat bool checkFlag; 149658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t postFlag; 150658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat}; 151658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 152658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatstruct dataTransferTest_t 153658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat{ 154658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t id; 155658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat instr_t op; 156658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t preFlag; 157658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat cond_t cond; 158658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat bool setMem; 159658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint64_t memOffset; 160658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint64_t memValue; 161658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint64_t RnValue; 162658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat offset_t offsetType; 163658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint64_t RmValue; 164658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t immValue; 165658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat bool writeBack; 166658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat bool preIndex; 167658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat bool postIndex; 168658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint64_t RdValue; 169658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint64_t postRdValue; 170658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint64_t postRnValue; 171658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat bool checkMem; 172658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint64_t postMemOffset; 173658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t postMemLength; 174658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint64_t postMemValue; 175658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat}; 176658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 177658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 178658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok BhatdataOpTest_t dataOpTests [] = 179658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat{ 180658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA000,INSTR_ADD,AL,AL,0,1,NA,1,MAX_32BIT ,NA,NA,NA,NA,1,0,0,0}, 181658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA001,INSTR_ADD,AL,AL,0,1,NA,1,MAX_32BIT -1,NA,NA,NA,NA,1,MAX_32BIT,0,0}, 182658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA002,INSTR_ADD,AL,AL,0,1,NA,0,NA,MAX_32BIT ,NA,NA,NA,1,0,0,0}, 183658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA003,INSTR_ADD,AL,AL,0,1,NA,0,NA,MAX_32BIT -1,NA,NA,NA,1,MAX_32BIT,0,0}, 184658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA004,INSTR_ADD,AL,AL,0,1,NA,0,0,MAX_32BIT ,SHIFT_LSL,0,NA,1,0,0,0}, 185658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA005,INSTR_ADD,AL,AL,0,1,NA,0,0,MAX_32BIT ,SHIFT_LSL,31,NA,1,0x80000001,0,0}, 186658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA006,INSTR_ADD,AL,AL,0,1,NA,0,0,3,SHIFT_LSR,1,NA,1,2,0,0}, 187658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA007,INSTR_ADD,AL,AL,0,1,NA,0,0,MAX_32BIT ,SHIFT_LSR,31,NA,1,2,0,0}, 188658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA008,INSTR_ADD,AL,AL,0,0,NA,0,0,3,SHIFT_ASR,1,NA,1,1,0,0}, 189658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA009,INSTR_ADD,AL,AL,0,1,NA,0,0,MAX_32BIT ,SHIFT_ASR,31,NA,1,0,0,0}, 190658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA010,INSTR_AND,AL,AL,0,1,NA,1,MAX_32BIT ,0,0,0,NA,1,1,0,0}, 191658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA011,INSTR_AND,AL,AL,0,1,NA,1,MAX_32BIT -1,0,0,0,NA,1,0,0,0}, 192658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA012,INSTR_AND,AL,AL,0,1,NA,0,0,MAX_32BIT ,0,0,NA,1,1,0,0}, 193658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA013,INSTR_AND,AL,AL,0,1,NA,0,0,MAX_32BIT -1,0,0,NA,1,0,0,0}, 194658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA014,INSTR_AND,AL,AL,0,1,NA,0,0,MAX_32BIT ,SHIFT_LSL,0,NA,1,1,0,0}, 195658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA015,INSTR_AND,AL,AL,0,1,NA,0,0,MAX_32BIT ,SHIFT_LSL,31,NA,1,0,0,0}, 196658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA016,INSTR_AND,AL,AL,0,1,NA,0,0,3,SHIFT_LSR,1,NA,1,1,0,0}, 197658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA017,INSTR_AND,AL,AL,0,1,NA,0,0,MAX_32BIT ,SHIFT_LSR,31,NA,1,1,0,0}, 198658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA018,INSTR_AND,AL,AL,0,0,NA,0,0,3,SHIFT_ASR,1,NA,1,0,0,0}, 199658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA019,INSTR_AND,AL,AL,0,1,NA,0,0,MAX_32BIT ,SHIFT_ASR,31,NA,1,1,0,0}, 200658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA020,INSTR_ORR,AL,AL,0,3,NA,1,MAX_32BIT ,0,0,0,NA,1,MAX_32BIT,0,0}, 201658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA021,INSTR_ORR,AL,AL,0,2,NA,1,MAX_32BIT -1,0,0,0,NA,1,MAX_32BIT-1,0,0}, 202658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA022,INSTR_ORR,AL,AL,0,3,NA,0,0,MAX_32BIT ,0,0,NA,1,MAX_32BIT,0,0}, 203658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA023,INSTR_ORR,AL,AL,0,2,NA,0,0,MAX_32BIT -1,0,0,NA,1,MAX_32BIT-1,0,0}, 204658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA024,INSTR_ORR,AL,AL,0,1,NA,0,0,MAX_32BIT ,SHIFT_LSL,0,NA,1,MAX_32BIT,0,0}, 205658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA025,INSTR_ORR,AL,AL,0,1,NA,0,0,MAX_32BIT ,SHIFT_LSL,31,NA,1,0x80000001,0,0}, 206658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA026,INSTR_ORR,AL,AL,0,1,NA,0,0,3,SHIFT_LSR,1,NA,1,1,0,0}, 207658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA027,INSTR_ORR,AL,AL,0,0,NA,0,0,MAX_32BIT ,SHIFT_LSR,31,NA,1,1,0,0}, 208658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA028,INSTR_ORR,AL,AL,0,0,NA,0,0,3,SHIFT_ASR,1,NA,1,1,0,0}, 209658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA029,INSTR_ORR,AL,AL,0,1,NA,0,0,MAX_32BIT ,SHIFT_ASR,31,NA,1,MAX_32BIT ,0,0}, 210658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA030,INSTR_CMP,AL,AL,1,0x10000,NA,1,0x10000,0,0,0,NA,0,0,1,HS}, 211658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA031,INSTR_CMP,AL,AL,1,0x00000,NA,1,0x10000,0,0,0,NA,0,0,1,CC}, 212658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA032,INSTR_CMP,AL,AL,1,0x00000,NA,0,0,0x10000,0,0,NA,0,0,1,LT}, 213658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA033,INSTR_CMP,AL,AL,1,0x10000,NA,0,0,0x10000,0,0,NA,0,0,1,EQ}, 214658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA034,INSTR_CMP,AL,AL,1,0x00000,NA,0,0,0x10000,0,0,NA,0,0,1,LS}, 215658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA035,INSTR_CMP,AL,AL,1,0x10000,NA,0,0,0x10000,0,0,NA,0,0,1,LS}, 216658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA036,INSTR_CMP,AL,AL,1,0x10000,NA,0,0,0x00000,0,0,NA,0,0,1,HI}, 217658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA037,INSTR_CMP,AL,AL,1,0x10000,NA,0,0,0x10000,0,0,NA,0,0,1,HS}, 218658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA038,INSTR_CMP,AL,AL,1,0x10000,NA,0,0,0x00000,0,0,NA,0,0,1,HS}, 219658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA039,INSTR_CMP,AL,AL,1,0x10000,NA,0,0,0x00000,0,0,NA,0,0,1,NE}, 220658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA040,INSTR_CMP,AL,AL,1,0,NA,0,0,MAX_32BIT ,SHIFT_LSR,1,NA,0,0,1,LT}, 221658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA041,INSTR_CMP,AL,AL,1,1,NA,0,0,MAX_32BIT ,SHIFT_LSR,31,NA,0,0,1,EQ}, 222658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA042,INSTR_CMP,AL,AL,1,0,NA,0,0,0x10000,SHIFT_LSR,31,NA,0,0,1,LS}, 223658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA043,INSTR_CMP,AL,AL,1,0x10000,NA,0,0,0x30000,SHIFT_LSR,1,NA,0,0,1,LS}, 224658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA044,INSTR_CMP,AL,AL,1,0x10000,NA,0,0,0x00000,SHIFT_LSR,31,NA,0,0,1,HI}, 225658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA045,INSTR_CMP,AL,AL,1,1,NA,0,0,MAX_32BIT ,SHIFT_LSR,31,NA,0,0,1,HS}, 226658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA046,INSTR_CMP,AL,AL,1,0x10000,NA,0,0,0x2000,SHIFT_LSR,1,NA,0,0,1,HS}, 227658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA047,INSTR_CMP,AL,AL,1,0,NA,0,0,MAX_32BIT ,SHIFT_LSR,1,NA,0,0,1,NE}, 228658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA048,INSTR_CMP,AL,AL,1,0,NA,0,0,0x10000,SHIFT_ASR,2,NA,0,0,1,LT}, 229658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA049,INSTR_CMP,AL,AL,1,MAX_32BIT ,NA,0,0,MAX_32BIT ,SHIFT_ASR,1,NA,0,0,1,EQ}, 230658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA050,INSTR_CMP,AL,AL,1,MAX_32BIT ,NA,0,0,MAX_32BIT ,SHIFT_ASR,31,NA,0,0,1,LS}, 231658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA051,INSTR_CMP,AL,AL,1,0,NA,0,0,0x10000,SHIFT_ASR,1,NA,0,0,1,LS}, 232658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA052,INSTR_CMP,AL,AL,1,0x10000,NA,0,0,0x10000,SHIFT_ASR,1,NA,0,0,1,HI}, 233658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA053,INSTR_CMP,AL,AL,1,1,NA,0,0,0x10000,SHIFT_ASR,31,NA,0,0,1,HS}, 234658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA054,INSTR_CMP,AL,AL,1,1,NA,0,0,0x10000,SHIFT_ASR,16,NA,0,0,1,HS}, 235658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA055,INSTR_CMP,AL,AL,1,1,NA,0,0,MAX_32BIT ,SHIFT_ASR,1,NA,0,0,1,NE}, 236658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA056,INSTR_MUL,AL,AL,0,0,0x10000,0,0,0x10000,0,0,NA,1,0,0,0}, 237658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA057,INSTR_MUL,AL,AL,0,0,0x1000,0,0,0x10000,0,0,NA,1,0x10000000,0,0}, 238658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA058,INSTR_MUL,AL,AL,0,0,MAX_32BIT ,0,0,1,0,0,NA,1,MAX_32BIT ,0,0}, 239658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA059,INSTR_MLA,AL,AL,0,0x10000,0x10000,0,0,0x10000,0,0,NA,1,0x10000,0,0}, 240658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA060,INSTR_MLA,AL,AL,0,0x10000,0x1000,0,0,0x10000,0,0,NA,1,0x10010000,0,0}, 241658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA061,INSTR_MLA,AL,AL,1,1,MAX_32BIT ,0,0,1,0,0,NA,1,0,1,PL}, 242658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA062,INSTR_MLA,AL,AL,1,0,MAX_32BIT ,0,0,1,0,0,NA,1,MAX_32BIT ,1,MI}, 243658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA063,INSTR_SUB,AL,AL,1,1 << 16,NA,1,1 << 16,NA,NA,NA,NA,1,0,1,PL}, 244658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA064,INSTR_SUB,AL,AL,1,(1 << 16) + 1,NA,1,1 << 16,NA,NA,NA,NA,1,1,1,PL}, 245658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA065,INSTR_SUB,AL,AL,1,0,NA,1,1 << 16,NA,NA,NA,NA,1,(uint32_t)(0 - (1<<16)),1,MI}, 246658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA066,INSTR_SUB,MI,MI,0,2,NA,0,NA,1,NA,NA,2,1,1,0,NA}, 247658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA067,INSTR_SUB,EQ,MI,0,2,NA,0,NA,1,NA,NA,2,1,2,0,NA}, 248658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA068,INSTR_SUB,GT,GE,0,2,NA,1,1,NA,NA,NA,2,1,1,0,NA}, 249658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA069,INSTR_SUB,LT,GE,0,2,NA,1,1,NA,NA,NA,2,1,2,0,NA}, 250658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA070,INSTR_SUB,CS,HS,0,2,NA,1,1,NA,NA,NA,2,1,1,0,NA}, 251658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA071,INSTR_SUB,CC,HS,0,2,NA,1,1,NA,NA,NA,2,1,2,0,NA}, 252658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA072,INSTR_SUB,AL,AL,0,1,NA,1,1 << 16,0,0,0,NA,1,(uint32_t)(1 - (1 << 16)),0,NA}, 253658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA073,INSTR_SUB,AL,AL,0,MAX_32BIT,NA,1,1,0,0,0,NA,1,MAX_32BIT - 1,0,NA}, 254658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA074,INSTR_SUB,AL,AL,0,1,NA,1,1,0,0,0,NA,1,0,0,NA}, 255658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA075,INSTR_SUB,AL,AL,0,1,NA,0,NA,1 << 16,0,0,NA,1,(uint32_t)(1 - (1 << 16)),0,NA}, 256658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA076,INSTR_SUB,AL,AL,0,MAX_32BIT,NA,0,NA,1,0,0,NA,1,MAX_32BIT - 1,0,NA}, 257658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA077,INSTR_SUB,AL,AL,0,1,NA,0,NA,1,0,0,NA,1,0,0,NA}, 258658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA078,INSTR_SUB,AL,AL,0,1,NA,0,NA,1,SHIFT_LSL,16,NA,1,(uint32_t)(1 - (1 << 16)),0,NA}, 259658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA079,INSTR_SUB,AL,AL,0,0x80000001,NA,0,NA,MAX_32BIT ,SHIFT_LSL,31,NA,1,1,0,NA}, 260658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA080,INSTR_SUB,AL,AL,0,1,NA,0,NA,3,SHIFT_LSR,1,NA,1,0,0,NA}, 261658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA081,INSTR_SUB,AL,AL,0,1,NA,0,NA,MAX_32BIT ,SHIFT_LSR,31,NA,1,0,0,NA}, 262658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA082,INSTR_RSB,GT,GE,0,2,NA,1,0,NA,NA,NA,2,1,(uint32_t)-2,0,NA}, 263658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA083,INSTR_RSB,LT,GE,0,2,NA,1,0,NA,NA,NA,2,1,2,0,NA}, 264658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA084,INSTR_RSB,AL,AL,0,1,NA,1,1 << 16,NA,NA,NA,NA,1,(1 << 16) - 1,0,NA}, 265658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA085,INSTR_RSB,AL,AL,0,MAX_32BIT,NA,1,1,NA,NA,NA,NA,1,(uint32_t) (1 - MAX_32BIT),0,NA}, 266658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA086,INSTR_RSB,AL,AL,0,1,NA,1,1,NA,NA,NA,NA,1,0,0,NA}, 267658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA087,INSTR_RSB,AL,AL,0,1,NA,0,NA,1 << 16,0,0,NA,1,(1 << 16) - 1,0,NA}, 268658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA088,INSTR_RSB,AL,AL,0,MAX_32BIT,NA,0,NA,1,0,0,NA,1,(uint32_t) (1 - MAX_32BIT),0,NA}, 269658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA089,INSTR_RSB,AL,AL,0,1,NA,0,NA,1,0,0,NA,1,0,0,NA}, 270658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA090,INSTR_RSB,AL,AL,0,1,NA,0,NA,1,SHIFT_LSL,16,NA,1,(1 << 16) - 1,0,NA}, 271658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA091,INSTR_RSB,AL,AL,0,0x80000001,NA,0,NA,MAX_32BIT ,SHIFT_LSL,31,NA,1,(uint32_t)-1,0,NA}, 272658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA092,INSTR_RSB,AL,AL,0,1,NA,0,NA,3,SHIFT_LSR,1,NA,1,0,0,NA}, 273658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA093,INSTR_RSB,AL,AL,0,1,NA,0,NA,MAX_32BIT ,SHIFT_LSR,31,NA,1,0,0,NA}, 274658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA094,INSTR_MOV,AL,AL,0,NA,NA,1,0x80000001,NA,NA,NA,NA,1,0x80000001,0,0}, 275658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA095,INSTR_MOV,AL,AL,0,NA,NA,0,0,0x80000001,0,0,NA,1,0x80000001,0,0}, 276658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA096,INSTR_MOV,AL,AL,0,NA,NA,0,0,MAX_32BIT ,SHIFT_LSL,1,NA,1,MAX_32BIT -1,0,0}, 277658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA097,INSTR_MOV,AL,AL,0,NA,NA,0,0,MAX_32BIT ,SHIFT_LSL,31,NA,1,0x80000000,0,0}, 278658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA098,INSTR_MOV,AL,AL,0,NA,NA,0,0,3,SHIFT_LSR,1,NA,1,1,0,0}, 279658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA099,INSTR_MOV,AL,AL,0,NA,NA,0,0,MAX_32BIT ,SHIFT_LSR,31,NA,1,1,0,0}, 280658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA100,INSTR_MOV,AL,AL,0,NA,NA,0,0,3,SHIFT_ASR,1,NA,1,1,0,0}, 281658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA101,INSTR_MOV,AL,AL,0,NA,NA,0,0,MAX_32BIT ,SHIFT_ASR,31,NA,1,MAX_32BIT ,0,0}, 282658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA102,INSTR_MOV,AL,AL,0,NA,NA,0,0,3,SHIFT_ROR,1,NA,1,0x80000001,0,0}, 283658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA103,INSTR_MOV,AL,AL,0,NA,NA,0,0,0x80000001,SHIFT_ROR,31,NA,1,3,0,0}, 284658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA104,INSTR_MOV,AL,AL,1,NA,NA,0,0,MAX_32BIT -1,SHIFT_ASR,1,NA,1,MAX_32BIT,1,MI}, 285658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA105,INSTR_MOV,AL,AL,1,NA,NA,0,0,3,SHIFT_ASR,1,NA,1,1,1,PL}, 286658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA106,INSTR_MOV,PL,MI,0,NA,NA,1,0x80000001,NA,NA,NA,2,1,2,0,0}, 287658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA107,INSTR_MOV,MI,MI,0,NA,NA,0,0,0x80000001,0,0,2,1,0x80000001,0,0}, 288658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA108,INSTR_MOV,EQ,LT,0,NA,NA,1,0x80000001,NA,NA,NA,2,1,2,0,0}, 289658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA109,INSTR_MOV,LT,LT,0,NA,NA,1,0x80000001,NA,NA,NA,2,1,0x80000001,0,0}, 290658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA110,INSTR_MOV,GT,GE,0,NA,NA,0,0,MAX_32BIT ,SHIFT_LSL,1,2,1,MAX_32BIT -1,0,0}, 291658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA111,INSTR_MOV,EQ,GE,0,NA,NA,0,0,MAX_32BIT ,SHIFT_LSL,31,2,1,0x80000000,0,0}, 292658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA112,INSTR_MOV,LT,GE,0,NA,NA,0,0,MAX_32BIT ,SHIFT_LSL,31,2,1,2,0,0}, 293658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA113,INSTR_MOV,GT,LE,0,NA,NA,0,0,MAX_32BIT ,SHIFT_LSL,1,2,1,2,0,0}, 294658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA114,INSTR_MOV,EQ,LE,0,NA,NA,1,0x80000001,NA,NA,NA,2,1,0x80000001,0,0}, 295658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA115,INSTR_MOV,LT,LE,0,NA,NA,0,0,MAX_32BIT ,SHIFT_LSL,31,2,1,0x80000000,0,0}, 296658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA116,INSTR_MOV,EQ,GT,0,NA,NA,1,0x80000001,NA,NA,NA,2,1,2,0,0}, 297658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA117,INSTR_MOV,GT,GT,0,NA,NA,1,0x80000001,NA,NA,NA,2,1,0x80000001,0,0}, 298658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA118,INSTR_MOV,LE,GT,0,NA,NA,1,0x80000001,NA,NA,NA,2,1,2,0,0}, 299658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA119,INSTR_MOV,EQ,GT,0,NA,NA,0,0,0x80000001,0,0,2,1,2,0,0}, 300658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA120,INSTR_MOV,GT,GT,0,NA,NA,0,0,0x80000001,0,0,2,1,0x80000001,0,0}, 301658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA121,INSTR_MOV,LE,GT,0,NA,NA,0,0,0x80000001,0,0,2,1,2,0,0}, 302658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA122,INSTR_MOV,EQ,GT,0,NA,NA,0,0,MAX_32BIT ,SHIFT_LSL,1,2,1,2,0,0}, 303658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA123,INSTR_MOV,GT,GT,0,NA,NA,0,0,MAX_32BIT ,SHIFT_LSL,1,2,1,MAX_32BIT -1,0,0}, 304658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA124,INSTR_MOV,LE,GT,0,NA,NA,0,0,MAX_32BIT ,SHIFT_LSL,1,2,1,2,0,0}, 305658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA125,INSTR_MOV,LO,HS,0,NA,NA,1,0x80000001,NA,NA,NA,2,1,2,0,0}, 306658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA126,INSTR_MOV,HS,HS,0,NA,NA,1,0x80000001,NA,NA,NA,2,1,0x80000001,0,0}, 307658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA127,INSTR_MVN,LO,HS,0,NA,NA,1,MAX_32BIT -1,NA,NA,NA,2,1,2,0,0}, 308658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA128,INSTR_MVN,HS,HS,0,NA,NA,1,MAX_32BIT -1,NA,NA,NA,2,1,1,0,0}, 309658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA129,INSTR_MVN,AL,AL,0,NA,NA,1,0,NA,NA,NA,2,1,MAX_32BIT,0,NA}, 310658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA130,INSTR_MVN,AL,AL,0,NA,NA,0,NA,MAX_32BIT -1,NA,0,2,1,1,0,NA}, 311658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA131,INSTR_MVN,AL,AL,0,NA,NA,0,NA,0x80000001,NA,0,2,1,0x7FFFFFFE,0,NA}, 312658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA132,INSTR_BIC,AL,AL,0,1,NA,1,MAX_32BIT ,NA,NA,NA,NA,1,0,0,0}, 313658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA133,INSTR_BIC,AL,AL,0,1,NA,1,MAX_32BIT -1,NA,NA,NA,NA,1,1,0,0}, 314658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA134,INSTR_BIC,AL,AL,0,1,NA,0,0,MAX_32BIT ,0,0,NA,1,0,0,0}, 315658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA135,INSTR_BIC,AL,AL,0,1,NA,0,0,MAX_32BIT -1,0,0,NA,1,1,0,0}, 316658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA136,INSTR_BIC,AL,AL,0,0xF0,NA,0,0,3,SHIFT_ASR,1,NA,1,0xF0,0,0}, 317658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA137,INSTR_BIC,AL,AL,0,0xF0,NA,0,0,MAX_32BIT ,SHIFT_ASR,31,NA,1,0,0,0}, 318658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA138,INSTR_SMULBB,AL,AL,0,NA,0xABCDFFFF,0,NA,0xABCD0001,NA,NA,NA,1,0xFFFFFFFF,0,0}, 319658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA139,INSTR_SMULBB,AL,AL,0,NA,0xABCD0001,0,NA,0xABCD0FFF,NA,NA,NA,1,0x00000FFF,0,0}, 320658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA140,INSTR_SMULBB,AL,AL,0,NA,0xABCD0001,0,NA,0xABCDFFFF,NA,NA,NA,1,0xFFFFFFFF,0,0}, 321658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA141,INSTR_SMULBB,AL,AL,0,NA,0xABCDFFFF,0,NA,0xABCDFFFF,NA,NA,NA,1,1,0,0}, 322658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA142,INSTR_SMULBT,AL,AL,0,NA,0xFFFFABCD,0,NA,0xABCD0001,NA,NA,NA,1,0xFFFFFFFF,0,0}, 323658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA143,INSTR_SMULBT,AL,AL,0,NA,0x0001ABCD,0,NA,0xABCD0FFF,NA,NA,NA,1,0x00000FFF,0,0}, 324658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA144,INSTR_SMULBT,AL,AL,0,NA,0x0001ABCD,0,NA,0xABCDFFFF,NA,NA,NA,1,0xFFFFFFFF,0,0}, 325658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA145,INSTR_SMULBT,AL,AL,0,NA,0xFFFFABCD,0,NA,0xABCDFFFF,NA,NA,NA,1,1,0,0}, 326658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA146,INSTR_SMULTB,AL,AL,0,NA,0xABCDFFFF,0,NA,0x0001ABCD,NA,NA,NA,1,0xFFFFFFFF,0,0}, 327658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA147,INSTR_SMULTB,AL,AL,0,NA,0xABCD0001,0,NA,0x0FFFABCD,NA,NA,NA,1,0x00000FFF,0,0}, 328658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA148,INSTR_SMULTB,AL,AL,0,NA,0xABCD0001,0,NA,0xFFFFABCD,NA,NA,NA,1,0xFFFFFFFF,0,0}, 329658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA149,INSTR_SMULTB,AL,AL,0,NA,0xABCDFFFF,0,NA,0xFFFFABCD,NA,NA,NA,1,1,0,0}, 330658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA150,INSTR_SMULTT,AL,AL,0,NA,0xFFFFABCD,0,NA,0x0001ABCD,NA,NA,NA,1,0xFFFFFFFF,0,0}, 331658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA151,INSTR_SMULTT,AL,AL,0,NA,0x0001ABCD,0,NA,0x0FFFABCD,NA,NA,NA,1,0x00000FFF,0,0}, 332658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA152,INSTR_SMULTT,AL,AL,0,NA,0x0001ABCD,0,NA,0xFFFFABCD,NA,NA,NA,1,0xFFFFFFFF,0,0}, 333658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA153,INSTR_SMULTT,AL,AL,0,NA,0xFFFFABCD,0,NA,0xFFFFABCD,NA,NA,NA,1,1,0,0}, 334658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA154,INSTR_SMULWB,AL,AL,0,NA,0xABCDFFFF,0,NA,0x0001ABCD,NA,NA,NA,1,0xFFFFFFFE,0,0}, 335658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA155,INSTR_SMULWB,AL,AL,0,NA,0xABCD0001,0,NA,0x0FFFABCD,NA,NA,NA,1,0x00000FFF,0,0}, 336658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA156,INSTR_SMULWB,AL,AL,0,NA,0xABCD0001,0,NA,0xFFFFABCD,NA,NA,NA,1,0xFFFFFFFF,0,0}, 337658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA157,INSTR_SMULWB,AL,AL,0,NA,0xABCDFFFF,0,NA,0xFFFFABCD,NA,NA,NA,1,0,0,0}, 338658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA158,INSTR_SMULWT,AL,AL,0,NA,0xFFFFABCD,0,NA,0x0001ABCD,NA,NA,NA,1,0xFFFFFFFE,0,0}, 339658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA159,INSTR_SMULWT,AL,AL,0,NA,0x0001ABCD,0,NA,0x0FFFABCD,NA,NA,NA,1,0x00000FFF,0,0}, 340658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA160,INSTR_SMULWT,AL,AL,0,NA,0x0001ABCD,0,NA,0xFFFFABCD,NA,NA,NA,1,0xFFFFFFFF,0,0}, 341658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA161,INSTR_SMULWT,AL,AL,0,NA,0xFFFFABCD,0,NA,0xFFFFABCD,NA,NA,NA,1,0,0,0}, 342658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA162,INSTR_SMLABB,AL,AL,0,1,0xABCDFFFF,0,NA,0xABCD0001,NA,NA,NA,1,0,0,0}, 343658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA163,INSTR_SMLABB,AL,AL,0,1,0xABCD0001,0,NA,0xABCD0FFF,NA,NA,NA,1,0x00001000,0,0}, 344658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA164,INSTR_SMLABB,AL,AL,0,0xFFFFFFFF,0xABCD0001,0,NA,0xABCDFFFF,NA,NA,NA,1,0xFFFFFFFE,0,0}, 345658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA165,INSTR_SMLABB,AL,AL,0,0xFFFFFFFF,0xABCDFFFF,0,NA,0xABCDFFFF,NA,NA,NA,1,0,0,0}, 346658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA166,INSTR_UXTB16,AL,AL,0,NA,NA,0,NA,0xABCDEF01,SHIFT_ROR,0,NA,1,0x00CD0001,0,0}, 347658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA167,INSTR_UXTB16,AL,AL,0,NA,NA,0,NA,0xABCDEF01,SHIFT_ROR,1,NA,1,0x00AB00EF,0,0}, 348658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA168,INSTR_UXTB16,AL,AL,0,NA,NA,0,NA,0xABCDEF01,SHIFT_ROR,2,NA,1,0x000100CD,0,0}, 349658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA169,INSTR_UXTB16,AL,AL,0,NA,NA,0,NA,0xABCDEF01,SHIFT_ROR,3,NA,1,0x00EF00AB,0,0}, 350658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA170,INSTR_UBFX,AL,AL,0,0xABCDEF01,4,0,NA,24,NA,NA,NA,1,0x00BCDEF0,0,0}, 351658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA171,INSTR_UBFX,AL,AL,0,0xABCDEF01,1,0,NA,2,NA,NA,NA,1,0,0,0}, 352658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA172,INSTR_UBFX,AL,AL,0,0xABCDEF01,16,0,NA,8,NA,NA,NA,1,0xCD,0,0}, 353658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA173,INSTR_UBFX,AL,AL,0,0xABCDEF01,31,0,NA,1,NA,NA,NA,1,1,0,0}, 354658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA174,INSTR_ADDR_ADD,AL,AL,0,0xCFFFFFFFF,NA,0,NA,0x1,SHIFT_LSL,1,NA,1,0xD00000001,0,0}, 355658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA175,INSTR_ADDR_ADD,AL,AL,0,0x01,NA,0,NA,0x1,SHIFT_LSL,2,NA,1,0x5,0,0}, 356658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA176,INSTR_ADDR_ADD,AL,AL,0,0xCFFFFFFFF,NA,0,NA,0x1,NA,0,NA,1,0xD00000000,0,0}, 357658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA177,INSTR_ADDR_SUB,AL,AL,0,0xD00000001,NA,0,NA,0x010000,SHIFT_LSR,15,NA,1,0xCFFFFFFFF,0,0}, 358658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA178,INSTR_ADDR_SUB,AL,AL,0,0xCFFFFFFFF,NA,0,NA,0x020000,SHIFT_LSR,15,NA,1,0xCFFFFFFFB,0,0}, 359658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xA179,INSTR_ADDR_SUB,AL,AL,0,3,NA,0,NA,0x010000,SHIFT_LSR,15,NA,1,1,0,0}, 360658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat}; 361658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 362658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok BhatdataTransferTest_t dataTransferTests [] = 363658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat{ 364658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB000,INSTR_LDR,AL,AL,1,24,0xABCDEF0123456789,0,REG_SCALE_OFFSET,24,NA,NA,NA,NA,NA,0x23456789,0,0,NA,NA,NA}, 365658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB001,INSTR_LDR,AL,AL,1,4064,0xABCDEF0123456789,0,IMM12_OFFSET,NA,4068,0,1,0,NA,0xABCDEF01,0,0,NA,NA,NA}, 366658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB002,INSTR_LDR,AL,AL,1,0,0xABCDEF0123456789,0,IMM12_OFFSET,NA,4,1,0,1,NA,0x23456789,4,0,NA,NA,NA}, 367658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB003,INSTR_LDR,AL,AL,1,0,0xABCDEF0123456789,0,NO_OFFSET,NA,NA,0,0,0,NA,0x23456789,0,0,NA,NA,NA}, 368658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB004,INSTR_LDRB,AL,AL,1,4064,0xABCDEF0123456789,0,REG_SCALE_OFFSET,4064,NA,NA,NA,NA,NA,0x89,0,0,NA,NA,NA}, 369658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB005,INSTR_LDRB,AL,AL,1,4064,0xABCDEF0123456789,0,IMM12_OFFSET,NA,4065,0,1,0,NA,0x67,0,0,NA,NA,NA}, 370658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB006,INSTR_LDRB,AL,AL,1,4064,0xABCDEF0123456789,4065,IMM12_OFFSET,NA,0,0,1,0,NA,0x67,4065,0,NA,NA,NA}, 371658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB007,INSTR_LDRB,AL,AL,1,4064,0xABCDEF0123456789,4065,IMM12_OFFSET,NA,1,0,1,0,NA,0x45,4065,0,NA,NA,NA}, 372658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB008,INSTR_LDRB,AL,AL,1,4064,0xABCDEF0123456789,4065,IMM12_OFFSET,NA,2,0,1,0,NA,0x23,4065,0,NA,NA,NA}, 373658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB009,INSTR_LDRB,AL,AL,1,4064,0xABCDEF0123456789,4065,IMM12_OFFSET,NA,1,1,0,1,NA,0x67,4066,0,NA,NA,NA}, 374658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB010,INSTR_LDRB,AL,AL,1,4064,0xABCDEF0123456789,0,NO_OFFSET,NA,NA,0,0,0,NA,0x89,0,0,NA,NA,NA}, 375658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB011,INSTR_LDRH,AL,AL,1,0,0xABCDEF0123456789,0,IMM8_OFFSET,NA,2,1,0,1,NA,0x6789,2,0,NA,NA,NA}, 376658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB012,INSTR_LDRH,AL,AL,1,4064,0xABCDEF0123456789,0,REG_OFFSET,4064,0,0,1,0,NA,0x6789,0,0,NA,NA,NA}, 377658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB013,INSTR_LDRH,AL,AL,1,4064,0xABCDEF0123456789,0,REG_OFFSET,4066,0,0,1,0,NA,0x2345,0,0,NA,NA,NA}, 378658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB014,INSTR_LDRH,AL,AL,1,0,0xABCDEF0123456789,0,NO_OFFSET,NA,0,0,0,0,NA,0x6789,0,0,NA,NA,NA}, 379658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB015,INSTR_LDRH,AL,AL,1,0,0xABCDEF0123456789,2,NO_OFFSET,NA,0,0,0,0,NA,0x2345,2,0,NA,NA,NA}, 380658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB016,INSTR_ADDR_LDR,AL,AL,1,4064,0xABCDEF0123456789,0,IMM12_OFFSET,NA,4064,0,1,0,NA,0xABCDEF0123456789,0,0,NA,NA,NA}, 381658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB017,INSTR_STR,AL,AL,1,2,0xDEADBEEFDEADBEEF,4,IMM12_OFFSET,NA,4,1,0,1,0xABCDEF0123456789,0xABCDEF0123456789,8,1,2,8,0xDEAD23456789BEEF}, 382658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB018,INSTR_STR,AL,AL,1,2,0xDEADBEEFDEADBEEF,4,NO_OFFSET,NA,NA,0,0,0,0xABCDEF0123456789,0xABCDEF0123456789,4,1,2,8,0xDEAD23456789BEEF}, 383658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB019,INSTR_STR,AL,AL,1,4066,0xDEADBEEFDEADBEEF,4,IMM12_OFFSET,NA,4064,0,1,0,0xABCDEF0123456789,0xABCDEF0123456789,4,1,4066,8,0xDEAD23456789BEEF}, 384658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB020,INSTR_STRB,AL,AL,1,0,0xDEADBEEFDEADBEEF,1,IMM12_OFFSET,NA,0,0,1,0,0xABCDEF0123456789,0xABCDEF0123456789,1,1,0,8,0xDEADBEEFDEAD89EF}, 385658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB021,INSTR_STRB,AL,AL,1,0,0xDEADBEEFDEADBEEF,1,IMM12_OFFSET,NA,1,0,1,0,0xABCDEF0123456789,0xABCDEF0123456789,1,1,0,8,0xDEADBEEFDE89BEEF}, 386658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB022,INSTR_STRB,AL,AL,1,0,0xDEADBEEFDEADBEEF,1,IMM12_OFFSET,NA,2,0,1,0,0xABCDEF0123456789,0xABCDEF0123456789,1,1,0,8,0xDEADBEEF89ADBEEF}, 387658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB023,INSTR_STRB,AL,AL,1,0,0xDEADBEEFDEADBEEF,1,IMM12_OFFSET,NA,4,1,0,1,0xABCDEF0123456789,0xABCDEF0123456789,5,1,0,8,0xDEADBEEFDEAD89EF}, 388658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB024,INSTR_STRB,AL,AL,1,0,0xDEADBEEFDEADBEEF,1,NO_OFFSET,NA,NA,0,0,0,0xABCDEF0123456789,0xABCDEF0123456789,1,1,0,8,0xDEADBEEFDEAD89EF}, 389658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB025,INSTR_STRH,AL,AL,1,4066,0xDEADBEEFDEADBEEF,4070,IMM12_OFFSET,NA,2,1,0,1,0xABCDEF0123456789,0xABCDEF0123456789,4072,1,4066,8,0xDEAD6789DEADBEEF}, 390658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB026,INSTR_STRH,AL,AL,1,4066,0xDEADBEEFDEADBEEF,4070,NO_OFFSET,NA,NA,0,0,0,0xABCDEF0123456789,0xABCDEF0123456789,4070,1,4066,8,0xDEAD6789DEADBEEF}, 391658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB027,INSTR_STRH,EQ,NE,1,4066,0xDEADBEEFDEADBEEF,4070,NO_OFFSET,NA,NA,0,0,0,0xABCDEF0123456789,0xABCDEF0123456789,4070,1,4066,8,0xDEADBEEFDEADBEEF}, 392658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB028,INSTR_STRH,NE,NE,1,4066,0xDEADBEEFDEADBEEF,4070,NO_OFFSET,NA,NA,0,0,0,0xABCDEF0123456789,0xABCDEF0123456789,4070,1,4066,8,0xDEAD6789DEADBEEF}, 393658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB029,INSTR_STRH,NE,EQ,1,4066,0xDEADBEEFDEADBEEF,4070,NO_OFFSET,NA,NA,0,0,0,0xABCDEF0123456789,0xABCDEF0123456789,4070,1,4066,8,0xDEADBEEFDEADBEEF}, 394658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB030,INSTR_STRH,EQ,EQ,1,4066,0xDEADBEEFDEADBEEF,4070,NO_OFFSET,NA,NA,0,0,0,0xABCDEF0123456789,0xABCDEF0123456789,4070,1,4066,8,0xDEAD6789DEADBEEF}, 395658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB031,INSTR_STRH,HI,LS,1,4066,0xDEADBEEFDEADBEEF,4070,NO_OFFSET,NA,NA,0,0,0,0xABCDEF0123456789,0xABCDEF0123456789,4070,1,4066,8,0xDEADBEEFDEADBEEF}, 396658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB032,INSTR_STRH,LS,LS,1,4066,0xDEADBEEFDEADBEEF,4070,NO_OFFSET,NA,NA,0,0,0,0xABCDEF0123456789,0xABCDEF0123456789,4070,1,4066,8,0xDEAD6789DEADBEEF}, 397658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB033,INSTR_STRH,LS,HI,1,4066,0xDEADBEEFDEADBEEF,4070,NO_OFFSET,NA,NA,0,0,0,0xABCDEF0123456789,0xABCDEF0123456789,4070,1,4066,8,0xDEADBEEFDEADBEEF}, 398658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB034,INSTR_STRH,HI,HI,1,4066,0xDEADBEEFDEADBEEF,4070,NO_OFFSET,NA,NA,0,0,0,0xABCDEF0123456789,0xABCDEF0123456789,4070,1,4066,8,0xDEAD6789DEADBEEF}, 399658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB035,INSTR_STRH,CC,HS,1,4066,0xDEADBEEFDEADBEEF,4070,NO_OFFSET,NA,NA,0,0,0,0xABCDEF0123456789,0xABCDEF0123456789,4070,1,4066,8,0xDEADBEEFDEADBEEF}, 400658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB036,INSTR_STRH,CS,HS,1,4066,0xDEADBEEFDEADBEEF,4070,NO_OFFSET,NA,NA,0,0,0,0xABCDEF0123456789,0xABCDEF0123456789,4070,1,4066,8,0xDEAD6789DEADBEEF}, 401658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB037,INSTR_STRH,GE,LT,1,4066,0xDEADBEEFDEADBEEF,4070,NO_OFFSET,NA,NA,0,0,0,0xABCDEF0123456789,0xABCDEF0123456789,4070,1,4066,8,0xDEADBEEFDEADBEEF}, 402658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB038,INSTR_STRH,LT,LT,1,4066,0xDEADBEEFDEADBEEF,4070,NO_OFFSET,NA,NA,0,0,0,0xABCDEF0123456789,0xABCDEF0123456789,4070,1,4066,8,0xDEAD6789DEADBEEF}, 403658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat {0xB039,INSTR_ADDR_STR,AL,AL,1,4064,0xDEADBEEFDEADBEEF,4,IMM12_OFFSET,NA,4060,0,1,0,0xABCDEF0123456789,0xABCDEF0123456789,4,1,4064,8,0xABCDEF0123456789}, 404658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat}; 405658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 406658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 40732ea4a895c4c914f0347dd1e943bca0f474a9050Colin Crossvoid flushcache() 408658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat{ 409658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat const long base = long(instrMem); 410658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat const long curr = base + long(instrMemSize); 411dc61d77872e1ed857a02444f90dac72f8169e738Chih-Hung Hsieh __builtin___clear_cache((char*)base, (char*)curr); 412658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat} 413658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatvoid dataOpTest(dataOpTest_t test, ARMAssemblerInterface *a64asm, uint32_t Rd = 0, 414658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t Rn = 1, uint32_t Rm = 2, uint32_t Rs = 3) 415658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat{ 416658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat int64_t regs[NUM_REGS] = {0}; 417658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat int32_t flags[NUM_FLAGS] = {0}; 418658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat int64_t savedRegs[NUM_REGS] = {0}; 419658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t i; 420658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t op2; 421658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 422658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(i = 0; i < NUM_REGS; ++i) 423658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 424658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat regs[i] = i; 425658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 426658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 427658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat regs[Rd] = test.RdValue; 428658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat regs[Rn] = test.RnValue; 429658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat regs[Rs] = test.RsValue; 430658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat flags[test.preFlag] = 1; 431658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat a64asm->reset(); 432658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat a64asm->prolog(); 433658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(test.immediate == true) 434658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 435658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat op2 = a64asm->imm(test.immValue); 436658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 437658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat else if(test.immediate == false && test.shiftAmount == 0) 438658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 439658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat op2 = Rm; 440658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat regs[Rm] = test.RmValue; 441658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 442658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat else 443658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 444658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat op2 = a64asm->reg_imm(Rm, test.shiftMode, test.shiftAmount); 445658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat regs[Rm] = test.RmValue; 446658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 447658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat switch(test.op) 448658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 449658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_ADD: a64asm->ADD(test.cond, test.setFlags, Rd,Rn,op2); break; 450658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_SUB: a64asm->SUB(test.cond, test.setFlags, Rd,Rn,op2); break; 451658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_RSB: a64asm->RSB(test.cond, test.setFlags, Rd,Rn,op2); break; 452658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_AND: a64asm->AND(test.cond, test.setFlags, Rd,Rn,op2); break; 453658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_ORR: a64asm->ORR(test.cond, test.setFlags, Rd,Rn,op2); break; 454658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_BIC: a64asm->BIC(test.cond, test.setFlags, Rd,Rn,op2); break; 455658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_MUL: a64asm->MUL(test.cond, test.setFlags, Rd,Rm,Rs); break; 456658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_MLA: a64asm->MLA(test.cond, test.setFlags, Rd,Rm,Rs,Rn); break; 457658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_CMP: a64asm->CMP(test.cond, Rn,op2); break; 458658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_MOV: a64asm->MOV(test.cond, test.setFlags,Rd,op2); break; 459658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_MVN: a64asm->MVN(test.cond, test.setFlags,Rd,op2); break; 460658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_SMULBB:a64asm->SMULBB(test.cond, Rd,Rm,Rs); break; 461658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_SMULBT:a64asm->SMULBT(test.cond, Rd,Rm,Rs); break; 462658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_SMULTB:a64asm->SMULTB(test.cond, Rd,Rm,Rs); break; 463658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_SMULTT:a64asm->SMULTT(test.cond, Rd,Rm,Rs); break; 464658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_SMULWB:a64asm->SMULWB(test.cond, Rd,Rm,Rs); break; 465658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_SMULWT:a64asm->SMULWT(test.cond, Rd,Rm,Rs); break; 466658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_SMLABB:a64asm->SMLABB(test.cond, Rd,Rm,Rs,Rn); break; 467658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_UXTB16:a64asm->UXTB16(test.cond, Rd,Rm,test.shiftAmount); break; 468658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_UBFX: 469658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 470658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat int32_t lsb = test.RsValue; 471658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat int32_t width = test.RmValue; 472658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat a64asm->UBFX(test.cond, Rd,Rn,lsb, width); 473658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat break; 474658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 475658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_ADDR_ADD: a64asm->ADDR_ADD(test.cond, test.setFlags, Rd,Rn,op2); break; 476658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_ADDR_SUB: a64asm->ADDR_SUB(test.cond, test.setFlags, Rd,Rn,op2); break; 477658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat default: printf("Error"); return; 478658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 479658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat a64asm->epilog(0); 480658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat flushcache(); 481658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 482658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat asm_function_t asm_function = (asm_function_t)(instrMem); 483658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 484658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(i = 0; i < NUM_REGS; ++i) 485658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat savedRegs[i] = regs[i]; 486658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 487658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat asm_test_jacket(asm_function, regs, flags); 488658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 489658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat /* Check if all regs except Rd is same */ 490658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(i = 0; i < NUM_REGS; ++i) 491658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 492658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(i == Rd) continue; 493658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(regs[i] != savedRegs[i]) 494658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 495fd1c060eaa640d6801b6d42e714a66bb2e6afac8Dan Albert printf("Test %x failed Reg(%d) tampered Expected(0x%" PRIx64 ")," 496fd1c060eaa640d6801b6d42e714a66bb2e6afac8Dan Albert "Actual(0x%" PRIx64 ") t\n", test.id, i, savedRegs[i], 497fd1c060eaa640d6801b6d42e714a66bb2e6afac8Dan Albert regs[i]); 498658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat return; 499658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 500658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 501658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 502658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(test.checkRd == 1 && (uint64_t)regs[Rd] != test.postRdValue) 503658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 504fd1c060eaa640d6801b6d42e714a66bb2e6afac8Dan Albert printf("Test %x failed, Expected(%" PRIx64 "), Actual(%" PRIx64 ")\n", 505fd1c060eaa640d6801b6d42e714a66bb2e6afac8Dan Albert test.id, test.postRdValue, regs[Rd]); 506658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 507658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat else if(test.checkFlag == 1 && flags[test.postFlag] == 0) 508658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 509658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat printf("Test %x failed Flag(%s) NOT set\n", 510658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat test.id,cc_code[test.postFlag]); 511658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 512658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat else 513658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 514658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat printf("Test %x passed\n", test.id); 515658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 516658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat} 517658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 518658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 519658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatvoid dataTransferTest(dataTransferTest_t test, ARMAssemblerInterface *a64asm, 520658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t Rd = 0, uint32_t Rn = 1,uint32_t Rm = 2) 521658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat{ 522658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat int64_t regs[NUM_REGS] = {0}; 523658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat int64_t savedRegs[NUM_REGS] = {0}; 524658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat int32_t flags[NUM_FLAGS] = {0}; 525658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t i; 526658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(i = 0; i < NUM_REGS; ++i) 527658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 528658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat regs[i] = i; 529658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 530658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 531658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t op2; 532658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 533658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat regs[Rd] = test.RdValue; 534658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat regs[Rn] = (uint64_t)(&dataMem[test.RnValue]); 535658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat regs[Rm] = test.RmValue; 536658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat flags[test.preFlag] = 1; 537658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 538658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(test.setMem == true) 539658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 540658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat unsigned char *mem = (unsigned char *)&dataMem[test.memOffset]; 541658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint64_t value = test.memValue; 542658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(int j = 0; j < 8; ++j) 543658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 544658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat mem[j] = value & 0x00FF; 545658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat value >>= 8; 546658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 547658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 548658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat a64asm->reset(); 549658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat a64asm->prolog(); 550658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(test.offsetType == REG_SCALE_OFFSET) 551658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 552658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat op2 = a64asm->reg_scale_pre(Rm); 553658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 554658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat else if(test.offsetType == REG_OFFSET) 555658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 556658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat op2 = a64asm->reg_pre(Rm); 557658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 558658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat else if(test.offsetType == IMM12_OFFSET && test.preIndex == true) 559658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 560658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat op2 = a64asm->immed12_pre(test.immValue, test.writeBack); 561658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 562658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat else if(test.offsetType == IMM12_OFFSET && test.postIndex == true) 563658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 564658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat op2 = a64asm->immed12_post(test.immValue); 565658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 566658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat else if(test.offsetType == IMM8_OFFSET && test.preIndex == true) 567658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 568658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat op2 = a64asm->immed8_pre(test.immValue, test.writeBack); 569658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 570658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat else if(test.offsetType == IMM8_OFFSET && test.postIndex == true) 571658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 572658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat op2 = a64asm->immed8_post(test.immValue); 573658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 574658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat else if(test.offsetType == NO_OFFSET) 575658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 576658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat op2 = a64asm->__immed12_pre(0); 577658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 578658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat else 579658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 580658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat printf("Error - Unknown offset\n"); return; 581658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 582658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 583658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat switch(test.op) 584658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 585658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_LDR: a64asm->LDR(test.cond, Rd,Rn,op2); break; 586658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_LDRB: a64asm->LDRB(test.cond, Rd,Rn,op2); break; 587658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_LDRH: a64asm->LDRH(test.cond, Rd,Rn,op2); break; 588658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_ADDR_LDR: a64asm->ADDR_LDR(test.cond, Rd,Rn,op2); break; 589658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_STR: a64asm->STR(test.cond, Rd,Rn,op2); break; 590658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_STRB: a64asm->STRB(test.cond, Rd,Rn,op2); break; 591658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_STRH: a64asm->STRH(test.cond, Rd,Rn,op2); break; 592658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat case INSTR_ADDR_STR: a64asm->ADDR_STR(test.cond, Rd,Rn,op2); break; 593658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat default: printf("Error"); return; 594658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 595658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat a64asm->epilog(0); 596658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat flushcache(); 597658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 598658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat asm_function_t asm_function = (asm_function_t)(instrMem); 599658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 600658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(i = 0; i < NUM_REGS; ++i) 601658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat savedRegs[i] = regs[i]; 602658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 603658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 604658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat asm_test_jacket(asm_function, regs, flags); 605658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 606658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat /* Check if all regs except Rd/Rn are same */ 607658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(i = 0; i < NUM_REGS; ++i) 608658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 609658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(i == Rd || i == Rn) continue; 610658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(regs[i] != savedRegs[i]) 611658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 612658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat printf("Test %x failed Reg(%d) tampered" 613fd1c060eaa640d6801b6d42e714a66bb2e6afac8Dan Albert " Expected(0x%" PRIx64 "), Actual(0x%" PRIx64 ") t\n", 614658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat test.id, i, savedRegs[i], regs[i]); 615658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat return; 616658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 617658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 618658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 619658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if((uint64_t)regs[Rd] != test.postRdValue) 620658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 621658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat printf("Test %x failed, " 622fd1c060eaa640d6801b6d42e714a66bb2e6afac8Dan Albert "Expected in Rd(0x%" PRIx64 "), Actual(0x%" PRIx64 ")\n", 623658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat test.id, test.postRdValue, regs[Rd]); 624658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 625658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat else if((uint64_t)regs[Rn] != (uint64_t)(&dataMem[test.postRnValue])) 626658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 627658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat printf("Test %x failed, " 628fd1c060eaa640d6801b6d42e714a66bb2e6afac8Dan Albert "Expected in Rn(0x%" PRIx64 "), Actual(0x%" PRIx64 ")\n", 629658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat test.id, test.postRnValue, regs[Rn] - (uint64_t)dataMem); 630658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 631658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat else if(test.checkMem == true) 632658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 633658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat unsigned char *addr = (unsigned char *)&dataMem[test.postMemOffset]; 634658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint64_t value; 635658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat value = 0; 636658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(uint32_t j = 0; j < test.postMemLength; ++j) 637658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat value = (value << 8) | addr[test.postMemLength-j-1]; 638658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(value != test.postMemValue) 639658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 640658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat printf("Test %x failed, " 641fd1c060eaa640d6801b6d42e714a66bb2e6afac8Dan Albert "Expected in Mem(0x%" PRIx64 "), Actual(0x%" PRIx64 ")\n", 642658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat test.id, test.postMemValue, value); 643658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 644658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat else 645658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 646658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat printf("Test %x passed\n", test.id); 647658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 648658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 649658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat else 650658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 651658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat printf("Test %x passed\n", test.id); 652658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 653658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat} 654658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 655658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatvoid dataTransferLDMSTM(ARMAssemblerInterface *a64asm) 656658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat{ 657658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat int64_t regs[NUM_REGS] = {0}; 658658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat int32_t flags[NUM_FLAGS] = {0}; 659658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat const uint32_t numArmv7Regs = 16; 660658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 661658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t Rn = ARMAssemblerInterface::SP; 662658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 663658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t patterns[] = 664658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 665658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 0x5A03, 666658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 0x4CF0, 667658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 0x1EA6, 668658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 0x0DBF, 669658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat }; 670658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 671658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t i, j; 672658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(i = 0; i < sizeof(patterns)/sizeof(uint32_t); ++i) 673658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 674658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(j = 0; j < NUM_REGS; ++j) 675658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 676658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat regs[j] = j; 677658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 678658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat a64asm->reset(); 679658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat a64asm->prolog(); 680658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat a64asm->STM(AL,ARMAssemblerInterface::DB,Rn,1,patterns[i]); 681658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(j = 0; j < numArmv7Regs; ++j) 682658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 683658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t op2 = a64asm->imm(0x31); 684658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat a64asm->MOV(AL, 0,j,op2); 685658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 686658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat a64asm->LDM(AL,ARMAssemblerInterface::IA,Rn,1,patterns[i]); 687658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat a64asm->epilog(0); 688658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat flushcache(); 689658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 690658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat asm_function_t asm_function = (asm_function_t)(instrMem); 691658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat asm_test_jacket(asm_function, regs, flags); 692658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 693658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(j = 0; j < numArmv7Regs; ++j) 694658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 695658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if((1 << j) & patterns[i]) 696658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 697658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(regs[j] != j) 698658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 699658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat printf("LDM/STM Test %x failed " 700fd1c060eaa640d6801b6d42e714a66bb2e6afac8Dan Albert "Reg%d expected(0x%x) Actual(0x%" PRIx64 ") \n", 701fd1c060eaa640d6801b6d42e714a66bb2e6afac8Dan Albert patterns[i], j, j, regs[j]); 702658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat break; 703658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 704658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 705658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 706658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(j == numArmv7Regs) 707658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat printf("LDM/STM Test %x passed\n", patterns[i]); 708658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 709658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat} 710658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 711658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhatint main(void) 712658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat{ 713658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t i; 714658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 715d4146e6091d6ed947ce9edd0f8ef3e5fe066d716Colin Cross /* Allocate memory to store instructions generated by ArmToArm64Assembler */ 716658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 717658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat int fd = ashmem_create_region("code cache", instrMemSize); 718658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(fd < 0) 719658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat printf("Creating code cache, ashmem_create_region " 720658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat "failed with error '%s'", strerror(errno)); 721658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat instrMem = mmap(NULL, instrMemSize, 722658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat PROT_READ | PROT_WRITE | PROT_EXEC, 723658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat MAP_PRIVATE, fd, 0); 724658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 725658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 726d4146e6091d6ed947ce9edd0f8ef3e5fe066d716Colin Cross ArmToArm64Assembler a64asm(instrMem); 727658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 728658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(TESTS_DATAOP_ENABLE) 729658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 730658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat printf("Running data processing tests\n"); 731658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(i = 0; i < sizeof(dataOpTests)/sizeof(dataOpTest_t); ++i) 732658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat dataOpTest(dataOpTests[i], &a64asm); 733658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 734658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 735658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(TESTS_DATATRANSFER_ENABLE) 736658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 737658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat printf("Running data transfer tests\n"); 738658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(i = 0; i < sizeof(dataTransferTests)/sizeof(dataTransferTest_t); ++i) 739658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat dataTransferTest(dataTransferTests[i], &a64asm); 740658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 741658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 742658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(TESTS_LDMSTM_ENABLE) 743658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 744658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat printf("Running LDM/STM tests\n"); 745658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat dataTransferLDMSTM(&a64asm); 746658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 747658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 748658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 749658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(TESTS_REG_CORRUPTION_ENABLE) 750658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 751658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t reg_list[] = {0,1,12,14}; 752658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t Rd, Rm, Rs, Rn; 753658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t i; 754658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat uint32_t numRegs = sizeof(reg_list)/sizeof(uint32_t); 755658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 756658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat printf("Running Register corruption tests\n"); 757658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(i = 0; i < sizeof(dataOpTests)/sizeof(dataOpTest_t); ++i) 758658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 759658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(Rd = 0; Rd < numRegs; ++Rd) 760658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 761658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(Rn = 0; Rn < numRegs; ++Rn) 762658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 763658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(Rm = 0; Rm < numRegs; ++Rm) 764658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 765658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat for(Rs = 0; Rs < numRegs;++Rs) 766658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat { 767658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(Rd == Rn || Rd == Rm || Rd == Rs) continue; 768658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(Rn == Rm || Rn == Rs) continue; 769658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat if(Rm == Rs) continue; 770658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat printf("Testing combination Rd(%d), Rn(%d)," 771658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat " Rm(%d), Rs(%d): ", 772658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat reg_list[Rd], reg_list[Rn], reg_list[Rm], reg_list[Rs]); 773658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat dataOpTest(dataOpTests[i], &a64asm, reg_list[Rd], 774658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat reg_list[Rn], reg_list[Rm], reg_list[Rs]); 775658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 776658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 777658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 778658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 779658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 780658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat } 781658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat return 0; 782658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat} 783