sve_mem.cc revision 13955
15409Sgblack@eecs.umich.edu/* 24519Sgblack@eecs.umich.edu * Copyright (c) 2017 ARM Limited 34519Sgblack@eecs.umich.edu * All rights reserved 44519Sgblack@eecs.umich.edu * 54519Sgblack@eecs.umich.edu * The license below extends only to copyright in the software and shall 64519Sgblack@eecs.umich.edu * not be construed as granting a license to any other intellectual 74519Sgblack@eecs.umich.edu * property including but not limited to intellectual property relating 84519Sgblack@eecs.umich.edu * to a hardware implementation of the functionality of the software 94519Sgblack@eecs.umich.edu * licensed hereunder. You may use the software subject to the license 104519Sgblack@eecs.umich.edu * terms below provided that you ensure that this notice is replicated 114519Sgblack@eecs.umich.edu * unmodified and in its entirety in all distributions of the software, 124519Sgblack@eecs.umich.edu * modified or unmodified, in source code or in binary form. 134519Sgblack@eecs.umich.edu * 144519Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 154519Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 164519Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 174519Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 184519Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 194519Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 204519Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 214519Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 224519Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 234519Sgblack@eecs.umich.edu * this software without specific prior written permission. 244519Sgblack@eecs.umich.edu * 254519Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 264519Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 274519Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 284519Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 294519Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 304519Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 314519Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 324519Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 334519Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 344519Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 354519Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 364519Sgblack@eecs.umich.edu * 374519Sgblack@eecs.umich.edu * Authors: Giacomo Gabrielli 384519Sgblack@eecs.umich.edu */ 394519Sgblack@eecs.umich.edu 404519Sgblack@eecs.umich.edu#include "arch/arm/insts/sve_mem.hh" 414519Sgblack@eecs.umich.edu 424519Sgblack@eecs.umich.edunamespace ArmISA 434519Sgblack@eecs.umich.edu{ 444519Sgblack@eecs.umich.edu 454519Sgblack@eecs.umich.edustd::string 464519Sgblack@eecs.umich.eduSveMemVecFillSpill::generateDisassembly(Addr pc, 474519Sgblack@eecs.umich.edu const SymbolTable *symtab) const 484519Sgblack@eecs.umich.edu{ 494519Sgblack@eecs.umich.edu std::stringstream ss; 504519Sgblack@eecs.umich.edu printMnemonic(ss, "", false); 514519Sgblack@eecs.umich.edu printVecReg(ss, dest, true); 524519Sgblack@eecs.umich.edu ccprintf(ss, ", ["); 534519Sgblack@eecs.umich.edu printIntReg(ss, base); 544519Sgblack@eecs.umich.edu if (imm != 0) { 554519Sgblack@eecs.umich.edu ccprintf(ss, ", #%d, mul vl", imm); 564519Sgblack@eecs.umich.edu } 574519Sgblack@eecs.umich.edu ccprintf(ss, "]"); 584519Sgblack@eecs.umich.edu return ss.str(); 594519Sgblack@eecs.umich.edu} 604519Sgblack@eecs.umich.edu 614519Sgblack@eecs.umich.edustd::string 624519Sgblack@eecs.umich.eduSveMemPredFillSpill::generateDisassembly(Addr pc, 634519Sgblack@eecs.umich.edu const SymbolTable *symtab) const 644519Sgblack@eecs.umich.edu{ 654519Sgblack@eecs.umich.edu std::stringstream ss; 664519Sgblack@eecs.umich.edu printMnemonic(ss, "", false); 674519Sgblack@eecs.umich.edu printVecPredReg(ss, dest); 684809Sgblack@eecs.umich.edu ccprintf(ss, ", ["); 694519Sgblack@eecs.umich.edu printIntReg(ss, base); 704519Sgblack@eecs.umich.edu if (imm != 0) { 714688Sgblack@eecs.umich.edu ccprintf(ss, ", #%d, mul vl", imm); 724688Sgblack@eecs.umich.edu } 734688Sgblack@eecs.umich.edu ccprintf(ss, "]"); 744688Sgblack@eecs.umich.edu return ss.str(); 754688Sgblack@eecs.umich.edu} 764688Sgblack@eecs.umich.edu 774708Sgblack@eecs.umich.edustd::string 784708Sgblack@eecs.umich.eduSveContigMemSS::generateDisassembly(Addr pc, const SymbolTable *symtab) const 794708Sgblack@eecs.umich.edu{ 804708Sgblack@eecs.umich.edu // TODO: add suffix to transfer register and scaling factor (LSL #<x>) 814519Sgblack@eecs.umich.edu std::stringstream ss; 824519Sgblack@eecs.umich.edu printMnemonic(ss, "", false); 834519Sgblack@eecs.umich.edu ccprintf(ss, "{"); 844519Sgblack@eecs.umich.edu printVecReg(ss, dest, true); 854519Sgblack@eecs.umich.edu ccprintf(ss, "}, "); 864519Sgblack@eecs.umich.edu printVecPredReg(ss, gp); 874519Sgblack@eecs.umich.edu ccprintf(ss, "/z, "); 884519Sgblack@eecs.umich.edu ccprintf(ss, ", ["); 894519Sgblack@eecs.umich.edu printIntReg(ss, base); 904519Sgblack@eecs.umich.edu ccprintf(ss, ", "); 914519Sgblack@eecs.umich.edu printIntReg(ss, offset); 924951Sgblack@eecs.umich.edu ccprintf(ss, "]"); 934519Sgblack@eecs.umich.edu return ss.str(); 944519Sgblack@eecs.umich.edu} 954519Sgblack@eecs.umich.edu 964519Sgblack@eecs.umich.edustd::string 974519Sgblack@eecs.umich.eduSveContigMemSI::generateDisassembly(Addr pc, const SymbolTable *symtab) const 984519Sgblack@eecs.umich.edu{ 994688Sgblack@eecs.umich.edu // TODO: add suffix to transfer register 1004688Sgblack@eecs.umich.edu std::stringstream ss; 1014688Sgblack@eecs.umich.edu printMnemonic(ss, "", false); 1024688Sgblack@eecs.umich.edu ccprintf(ss, "{"); 1034688Sgblack@eecs.umich.edu printVecReg(ss, dest, true); 1044688Sgblack@eecs.umich.edu ccprintf(ss, "}, "); 1054708Sgblack@eecs.umich.edu printVecPredReg(ss, gp); 1064708Sgblack@eecs.umich.edu ccprintf(ss, "/z, "); 1074708Sgblack@eecs.umich.edu ccprintf(ss, ", ["); 1084708Sgblack@eecs.umich.edu printIntReg(ss, base); 1094519Sgblack@eecs.umich.edu if (imm != 0) { 1104519Sgblack@eecs.umich.edu ccprintf(ss, ", #%d, mul vl", imm); 1114519Sgblack@eecs.umich.edu } 1124519Sgblack@eecs.umich.edu ccprintf(ss, "]"); 1134519Sgblack@eecs.umich.edu return ss.str(); 1144519Sgblack@eecs.umich.edu} 1154519Sgblack@eecs.umich.edu 1164519Sgblack@eecs.umich.edu} // namespace ArmISA 1174519Sgblack@eecs.umich.edu