macromem.isa revision 7134:60fe8a00b36e
16757SAli.Saidi@ARM.com// -*- mode:c++ -*- 27650SAli.Saidi@ARM.com 36757SAli.Saidi@ARM.com// Copyright (c) 2010 ARM Limited 46757SAli.Saidi@ARM.com// All rights reserved 57111Sgblack@eecs.umich.edu// 67111Sgblack@eecs.umich.edu// The license below extends only to copyright in the software and shall 77111Sgblack@eecs.umich.edu// not be construed as granting a license to any other intellectual 87111Sgblack@eecs.umich.edu// property including but not limited to intellectual property relating 97111Sgblack@eecs.umich.edu// to a hardware implementation of the functionality of the software 107111Sgblack@eecs.umich.edu// licensed hereunder. You may use the software subject to the license 117111Sgblack@eecs.umich.edu// terms below provided that you ensure that this notice is replicated 127111Sgblack@eecs.umich.edu// unmodified and in its entirety in all distributions of the software, 137111Sgblack@eecs.umich.edu// modified or unmodified, in source code or in binary form. 146757SAli.Saidi@ARM.com// 156757SAli.Saidi@ARM.com// Copyright (c) 2007-2008 The Florida State University 166757SAli.Saidi@ARM.com// All rights reserved. 176757SAli.Saidi@ARM.com// 186757SAli.Saidi@ARM.com// Redistribution and use in source and binary forms, with or without 196757SAli.Saidi@ARM.com// modification, are permitted provided that the following conditions are 206757SAli.Saidi@ARM.com// met: redistributions of source code must retain the above copyright 216757SAli.Saidi@ARM.com// notice, this list of conditions and the following disclaimer; 226757SAli.Saidi@ARM.com// redistributions in binary form must reproduce the above copyright 236757SAli.Saidi@ARM.com// notice, this list of conditions and the following disclaimer in the 246757SAli.Saidi@ARM.com// documentation and/or other materials provided with the distribution; 256757SAli.Saidi@ARM.com// neither the name of the copyright holders nor the names of its 266757SAli.Saidi@ARM.com// contributors may be used to endorse or promote products derived from 276757SAli.Saidi@ARM.com// this software without specific prior written permission. 286757SAli.Saidi@ARM.com// 296757SAli.Saidi@ARM.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 306757SAli.Saidi@ARM.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 316757SAli.Saidi@ARM.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 326757SAli.Saidi@ARM.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 336757SAli.Saidi@ARM.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 346757SAli.Saidi@ARM.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 356757SAli.Saidi@ARM.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 366757SAli.Saidi@ARM.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 376757SAli.Saidi@ARM.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 386757SAli.Saidi@ARM.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 396735Sgblack@eecs.umich.edu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 406757SAli.Saidi@ARM.com// 416757SAli.Saidi@ARM.com// Authors: Stephen Hines 427707Sgblack@eecs.umich.edu// Gabe Black 438782Sgblack@eecs.umich.edu 446757SAli.Saidi@ARM.com//////////////////////////////////////////////////////////////////// 458782Sgblack@eecs.umich.edu// 468733Sgeoffrey.blake@arm.com// Load/store microops 476757SAli.Saidi@ARM.com// 488706Sandreas.hansson@arm.com 498782Sgblack@eecs.umich.edulet {{ 507749SAli.Saidi@ARM.com predicateTest = 'testPredicate(CondCodes, condCode)' 516735Sgblack@eecs.umich.edu}}; 526735Sgblack@eecs.umich.edu 536735Sgblack@eecs.umich.edulet {{ 546735Sgblack@eecs.umich.edu microLdrUopIop = InstObjParams('ldr_uop', 'MicroLdrUop', 556735Sgblack@eecs.umich.edu 'MicroMemOp', 566735Sgblack@eecs.umich.edu {'memacc_code': 'Ra = Mem;', 576735Sgblack@eecs.umich.edu 'ea_code': 'EA = Rb + (up ? imm : -imm);', 586735Sgblack@eecs.umich.edu 'predicate_test': predicateTest}, 596735Sgblack@eecs.umich.edu ['IsMicroop']) 606757SAli.Saidi@ARM.com 618286SAli.Saidi@ARM.com microLdrRetUopCode = ''' 626735Sgblack@eecs.umich.edu Ra = Mem; 636735Sgblack@eecs.umich.edu uint32_t newCpsr = 647707Sgblack@eecs.umich.edu cpsrWriteByInstr(Cpsr | CondCodes, Spsr, 0xF, true); 657707Sgblack@eecs.umich.edu Cpsr = ~CondCodesMask & newCpsr; 667707Sgblack@eecs.umich.edu CondCodes = CondCodesMask & newCpsr; 678806Sgblack@eecs.umich.edu ''' 688806Sgblack@eecs.umich.edu microLdrRetUopIop = InstObjParams('ldr_ret_uop', 'MicroLdrRetUop', 698806Sgblack@eecs.umich.edu 'MicroMemOp', 708806Sgblack@eecs.umich.edu {'memacc_code': microLdrRetUopCode, 718706Sandreas.hansson@arm.com 'ea_code': 727707Sgblack@eecs.umich.edu 'EA = Rb + (up ? imm : -imm);', 737707Sgblack@eecs.umich.edu 'predicate_test': predicateTest}, 747693SAli.Saidi@ARM.com ['IsMicroop']) 757693SAli.Saidi@ARM.com 767693SAli.Saidi@ARM.com microStrUopIop = InstObjParams('str_uop', 'MicroStrUop', 777650SAli.Saidi@ARM.com 'MicroMemOp', 788806Sgblack@eecs.umich.edu {'memacc_code': 'Mem = Ra;', 798806Sgblack@eecs.umich.edu 'ea_code': 'EA = Rb + (up ? imm : -imm);', 807693SAli.Saidi@ARM.com 'predicate_test': predicateTest}, 817693SAli.Saidi@ARM.com ['IsMicroop']) 827693SAli.Saidi@ARM.com 838806Sgblack@eecs.umich.edu header_output = MicroMemDeclare.subst(microLdrUopIop) + \ 848806Sgblack@eecs.umich.edu MicroMemDeclare.subst(microLdrRetUopIop) + \ 857693SAli.Saidi@ARM.com MicroMemDeclare.subst(microStrUopIop) 867693SAli.Saidi@ARM.com decoder_output = MicroMemConstructor.subst(microLdrUopIop) + \ 877693SAli.Saidi@ARM.com MicroMemConstructor.subst(microLdrRetUopIop) + \ 887693SAli.Saidi@ARM.com MicroMemConstructor.subst(microStrUopIop) 897693SAli.Saidi@ARM.com exec_output = LoadExecute.subst(microLdrUopIop) + \ 907693SAli.Saidi@ARM.com LoadExecute.subst(microLdrRetUopIop) + \ 917693SAli.Saidi@ARM.com StoreExecute.subst(microStrUopIop) + \ 927693SAli.Saidi@ARM.com LoadInitiateAcc.subst(microLdrUopIop) + \ 937693SAli.Saidi@ARM.com LoadInitiateAcc.subst(microLdrRetUopIop) + \ 948852Sandreas.hansson@arm.com StoreInitiateAcc.subst(microStrUopIop) + \ 957693SAli.Saidi@ARM.com LoadCompleteAcc.subst(microLdrUopIop) + \ 967693SAli.Saidi@ARM.com LoadCompleteAcc.subst(microLdrRetUopIop) + \ 977693SAli.Saidi@ARM.com StoreCompleteAcc.subst(microStrUopIop) 987693SAli.Saidi@ARM.com}}; 997693SAli.Saidi@ARM.com 1008852Sandreas.hansson@arm.com//////////////////////////////////////////////////////////////////// 1017693SAli.Saidi@ARM.com// 1027693SAli.Saidi@ARM.com// Integer = Integer op Immediate microops 1037693SAli.Saidi@ARM.com// 1047693SAli.Saidi@ARM.com 1058852Sandreas.hansson@arm.comlet {{ 1067693SAli.Saidi@ARM.com microAddiUopIop = InstObjParams('addi_uop', 'MicroAddiUop', 1077693SAli.Saidi@ARM.com 'MicroIntOp', 1087693SAli.Saidi@ARM.com {'code': 'Ra = Rb + imm;', 1097650SAli.Saidi@ARM.com 'predicate_test': predicateTest}, 1106757SAli.Saidi@ARM.com ['IsMicroop']) 1116757SAli.Saidi@ARM.com 1127693SAli.Saidi@ARM.com microSubiUopIop = InstObjParams('subi_uop', 'MicroSubiUop', 1137693SAli.Saidi@ARM.com 'MicroIntOp', 1147693SAli.Saidi@ARM.com {'code': 'Ra = Rb - imm;', 1157720Sgblack@eecs.umich.edu 'predicate_test': predicateTest}, 1167720Sgblack@eecs.umich.edu ['IsMicroop']) 1178733Sgeoffrey.blake@arm.com 1188733Sgeoffrey.blake@arm.com header_output = MicroIntDeclare.subst(microAddiUopIop) + \ 1198733Sgeoffrey.blake@arm.com MicroIntDeclare.subst(microSubiUopIop) 1207720Sgblack@eecs.umich.edu decoder_output = MicroIntConstructor.subst(microAddiUopIop) + \ 1218733Sgeoffrey.blake@arm.com MicroIntConstructor.subst(microSubiUopIop) 1227693SAli.Saidi@ARM.com exec_output = PredOpExecute.subst(microAddiUopIop) + \ 1237693SAli.Saidi@ARM.com PredOpExecute.subst(microSubiUopIop) 1247748SAli.Saidi@ARM.com}}; 1257748SAli.Saidi@ARM.com 1267748SAli.Saidi@ARM.comlet {{ 1277748SAli.Saidi@ARM.com iop = InstObjParams("ldmstm", "LdmStm", 'PredMacroOp', "", []) 1288208SAli.Saidi@ARM.com header_output = MacroMemDeclare.subst(iop) 1298208SAli.Saidi@ARM.com decoder_output = MacroMemConstructor.subst(iop) 1308208SAli.Saidi@ARM.com exec_output = MacroMemExecute.subst(iop) 1318208SAli.Saidi@ARM.com}}; 1328208SAli.Saidi@ARM.com