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