HPI.py revision 13731
112149Sashkan.tousimojarad@arm.com# Copyright (c) 2014-2017 ARM Limited 212149Sashkan.tousimojarad@arm.com# All rights reserved. 312149Sashkan.tousimojarad@arm.com# 412149Sashkan.tousimojarad@arm.com# The license below extends only to copyright in the software and shall 512149Sashkan.tousimojarad@arm.com# not be construed as granting a license to any other intellectual 612149Sashkan.tousimojarad@arm.com# property including but not limited to intellectual property relating 712149Sashkan.tousimojarad@arm.com# to a hardware implementation of the functionality of the software 812149Sashkan.tousimojarad@arm.com# licensed hereunder. You may use the software subject to the license 912149Sashkan.tousimojarad@arm.com# terms below provided that you ensure that this notice is replicated 1012149Sashkan.tousimojarad@arm.com# unmodified and in its entirety in all distributions of the software, 1112149Sashkan.tousimojarad@arm.com# modified or unmodified, in source code or in binary form. 1212149Sashkan.tousimojarad@arm.com# 1312149Sashkan.tousimojarad@arm.com# Redistribution and use in source and binary forms, with or without 1412149Sashkan.tousimojarad@arm.com# modification, are permitted provided that the following conditions are 1512149Sashkan.tousimojarad@arm.com# met: redistributions of source code must retain the above copyright 1612149Sashkan.tousimojarad@arm.com# notice, this list of conditions and the following disclaimer; 1712149Sashkan.tousimojarad@arm.com# redistributions in binary form must reproduce the above copyright 1812149Sashkan.tousimojarad@arm.com# notice, this list of conditions and the following disclaimer in the 1912149Sashkan.tousimojarad@arm.com# documentation and/or other materials provided with the distribution; 2012149Sashkan.tousimojarad@arm.com# neither the name of the copyright holders nor the names of its 2112149Sashkan.tousimojarad@arm.com# contributors may be used to endorse or promote products derived from 2212149Sashkan.tousimojarad@arm.com# this software without specific prior written permission. 2312149Sashkan.tousimojarad@arm.com# 2412149Sashkan.tousimojarad@arm.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2512149Sashkan.tousimojarad@arm.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2612149Sashkan.tousimojarad@arm.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2712149Sashkan.tousimojarad@arm.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2812149Sashkan.tousimojarad@arm.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2912149Sashkan.tousimojarad@arm.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3012149Sashkan.tousimojarad@arm.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3112149Sashkan.tousimojarad@arm.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3212149Sashkan.tousimojarad@arm.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3312149Sashkan.tousimojarad@arm.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3412149Sashkan.tousimojarad@arm.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3512149Sashkan.tousimojarad@arm.com# 3612149Sashkan.tousimojarad@arm.com# Authors: Andrew Bardsley 3712149Sashkan.tousimojarad@arm.com# 3812149Sashkan.tousimojarad@arm.com 3912149Sashkan.tousimojarad@arm.com"""The High-Performance In-order (HPI) CPU timing model is tuned to be 4012149Sashkan.tousimojarad@arm.comrepresentative of a modern in-order ARMv8-A implementation. The HPI 4112149Sashkan.tousimojarad@arm.comcore and its supporting simulation scripts, namely starter_se.py and 4212149Sashkan.tousimojarad@arm.comstarter_fs.py (under /configs/example/arm/) are part of the ARM 4312149Sashkan.tousimojarad@arm.comResearch Starter Kit on System Modeling. More information can be found 4412149Sashkan.tousimojarad@arm.comat: http://www.arm.com/ResearchEnablement/SystemModeling 4512149Sashkan.tousimojarad@arm.com 4612149Sashkan.tousimojarad@arm.com""" 4712149Sashkan.tousimojarad@arm.com 4812564Sgabeblack@google.comfrom __future__ import print_function 4912564Sgabeblack@google.com 5012149Sashkan.tousimojarad@arm.comfrom m5.objects import * 5112149Sashkan.tousimojarad@arm.com 5212149Sashkan.tousimojarad@arm.com# Simple function to allow a string of [01x_] to be converted into a 5312149Sashkan.tousimojarad@arm.com# mask and value for use with MinorFUTiming 5412149Sashkan.tousimojarad@arm.comdef make_implicant(implicant_string): 5512149Sashkan.tousimojarad@arm.com ret_mask = 0 5612149Sashkan.tousimojarad@arm.com ret_match = 0 5712149Sashkan.tousimojarad@arm.com 5812149Sashkan.tousimojarad@arm.com shift = False 5912149Sashkan.tousimojarad@arm.com for char in implicant_string: 6012149Sashkan.tousimojarad@arm.com char = char.lower() 6112149Sashkan.tousimojarad@arm.com if shift: 6212149Sashkan.tousimojarad@arm.com ret_mask <<= 1 6312149Sashkan.tousimojarad@arm.com ret_match <<= 1 6412149Sashkan.tousimojarad@arm.com 6512149Sashkan.tousimojarad@arm.com shift = True 6612149Sashkan.tousimojarad@arm.com if char == '_': 6712149Sashkan.tousimojarad@arm.com shift = False 6812149Sashkan.tousimojarad@arm.com elif char == '0': 6912149Sashkan.tousimojarad@arm.com ret_mask |= 1 7012149Sashkan.tousimojarad@arm.com elif char == '1': 7112149Sashkan.tousimojarad@arm.com ret_mask |= 1 7212149Sashkan.tousimojarad@arm.com ret_match |= 1 7312149Sashkan.tousimojarad@arm.com elif char == 'x': 7412149Sashkan.tousimojarad@arm.com pass 7512149Sashkan.tousimojarad@arm.com else: 7612564Sgabeblack@google.com print("Can't parse implicant character", char) 7712149Sashkan.tousimojarad@arm.com 7812149Sashkan.tousimojarad@arm.com return (ret_mask, ret_match) 7912149Sashkan.tousimojarad@arm.com 8012149Sashkan.tousimojarad@arm.com# ,----- 36 thumb 8112149Sashkan.tousimojarad@arm.com# | ,--- 35 bigThumb 8212149Sashkan.tousimojarad@arm.com# | |,-- 34 aarch64 8312149Sashkan.tousimojarad@arm.coma64_inst = make_implicant('0_01xx__xxxx_xxxx_xxxx_xxxx__xxxx_xxxx_xxxx_xxxx') 8412149Sashkan.tousimojarad@arm.coma32_inst = make_implicant('0_00xx__xxxx_xxxx_xxxx_xxxx__xxxx_xxxx_xxxx_xxxx') 8512149Sashkan.tousimojarad@arm.comt32_inst = make_implicant('1_10xx__xxxx_xxxx_xxxx_xxxx__xxxx_xxxx_xxxx_xxxx') 8612149Sashkan.tousimojarad@arm.comt16_inst = make_implicant('1_00xx__xxxx_xxxx_xxxx_xxxx__xxxx_xxxx_xxxx_xxxx') 8712149Sashkan.tousimojarad@arm.comany_inst = make_implicant('x_xxxx__xxxx_xxxx_xxxx_xxxx__xxxx_xxxx_xxxx_xxxx') 8812149Sashkan.tousimojarad@arm.com# | || 8912149Sashkan.tousimojarad@arm.comany_a64_inst = \ 9012149Sashkan.tousimojarad@arm.com make_implicant('x_x1xx__xxxx_xxxx_xxxx_xxxx__xxxx_xxxx_xxxx_xxxx') 9112149Sashkan.tousimojarad@arm.comany_non_a64_inst = \ 9212149Sashkan.tousimojarad@arm.com make_implicant('x_x0xx__xxxx_xxxx_xxxx_xxxx__xxxx_xxxx_xxxx_xxxx') 9312149Sashkan.tousimojarad@arm.com 9412149Sashkan.tousimojarad@arm.comdef encode_opcode(pattern): 9512149Sashkan.tousimojarad@arm.com def encode(opcode_string): 9612149Sashkan.tousimojarad@arm.com a64_mask, a64_match = pattern 9712149Sashkan.tousimojarad@arm.com mask, match = make_implicant(opcode_string) 9812149Sashkan.tousimojarad@arm.com return (a64_mask | mask), (a64_match | match) 9912149Sashkan.tousimojarad@arm.com return encode 10012149Sashkan.tousimojarad@arm.com 10112149Sashkan.tousimojarad@arm.coma64_opcode = encode_opcode(a64_inst) 10212149Sashkan.tousimojarad@arm.coma32_opcode = encode_opcode(a32_inst) 10312149Sashkan.tousimojarad@arm.comt32_opcode = encode_opcode(t32_inst) 10412149Sashkan.tousimojarad@arm.comt16_opcode = encode_opcode(t16_inst) 10512149Sashkan.tousimojarad@arm.com 10612149Sashkan.tousimojarad@arm.com# These definitions (in some form) should probably be part of TimingExpr 10712149Sashkan.tousimojarad@arm.com 10812149Sashkan.tousimojarad@arm.comdef literal(value): 10912149Sashkan.tousimojarad@arm.com def body(env): 11012149Sashkan.tousimojarad@arm.com ret = TimingExprLiteral() 11112149Sashkan.tousimojarad@arm.com ret.value = value 11212149Sashkan.tousimojarad@arm.com return ret 11312149Sashkan.tousimojarad@arm.com return body 11412149Sashkan.tousimojarad@arm.com 11512149Sashkan.tousimojarad@arm.comdef bin(op, left, right): 11612149Sashkan.tousimojarad@arm.com def body(env): 11712149Sashkan.tousimojarad@arm.com ret = TimingExprBin() 11812149Sashkan.tousimojarad@arm.com ret.op = 'timingExpr' + op 11912149Sashkan.tousimojarad@arm.com ret.left = left(env) 12012149Sashkan.tousimojarad@arm.com ret.right = right(env) 12112149Sashkan.tousimojarad@arm.com return ret 12212149Sashkan.tousimojarad@arm.com return body 12312149Sashkan.tousimojarad@arm.com 12412149Sashkan.tousimojarad@arm.comdef un(op, arg): 12512149Sashkan.tousimojarad@arm.com def body(env): 12612149Sashkan.tousimojarad@arm.com ret = TimingExprUn() 12712149Sashkan.tousimojarad@arm.com ret.op = 'timingExpr' + op 12812149Sashkan.tousimojarad@arm.com ret.arg = arg(env) 12912149Sashkan.tousimojarad@arm.com return ret 13012149Sashkan.tousimojarad@arm.com return body 13112149Sashkan.tousimojarad@arm.com 13212149Sashkan.tousimojarad@arm.comdef ref(name): 13312149Sashkan.tousimojarad@arm.com def body(env): 13412149Sashkan.tousimojarad@arm.com if name in env: 13512149Sashkan.tousimojarad@arm.com ret = TimingExprRef() 13612149Sashkan.tousimojarad@arm.com ret.index = env[name] 13712149Sashkan.tousimojarad@arm.com else: 13812564Sgabeblack@google.com print("Invalid expression name", name) 13912149Sashkan.tousimojarad@arm.com ret = TimingExprNull() 14012149Sashkan.tousimojarad@arm.com return ret 14112149Sashkan.tousimojarad@arm.com return body 14212149Sashkan.tousimojarad@arm.com 14312149Sashkan.tousimojarad@arm.comdef if_expr(cond, true_expr, false_expr): 14412149Sashkan.tousimojarad@arm.com def body(env): 14512149Sashkan.tousimojarad@arm.com ret = TimingExprIf() 14612149Sashkan.tousimojarad@arm.com ret.cond = cond(env) 14712149Sashkan.tousimojarad@arm.com ret.trueExpr = true_expr(env) 14812149Sashkan.tousimojarad@arm.com ret.falseExpr = false_expr(env) 14912149Sashkan.tousimojarad@arm.com return ret 15012149Sashkan.tousimojarad@arm.com return body 15112149Sashkan.tousimojarad@arm.com 15212149Sashkan.tousimojarad@arm.comdef src(index): 15312149Sashkan.tousimojarad@arm.com def body(env): 15412149Sashkan.tousimojarad@arm.com ret = TimingExprSrcReg() 15512149Sashkan.tousimojarad@arm.com ret.index = index 15612149Sashkan.tousimojarad@arm.com return ret 15712149Sashkan.tousimojarad@arm.com return body 15812149Sashkan.tousimojarad@arm.com 15912149Sashkan.tousimojarad@arm.comdef int_reg(reg): 16012149Sashkan.tousimojarad@arm.com def body(env): 16112149Sashkan.tousimojarad@arm.com ret = TimingExprReadIntReg() 16212149Sashkan.tousimojarad@arm.com ret.reg = reg(env) 16312149Sashkan.tousimojarad@arm.com return ret 16412149Sashkan.tousimojarad@arm.com return body 16512149Sashkan.tousimojarad@arm.com 16612149Sashkan.tousimojarad@arm.comdef let(bindings, expr): 16712149Sashkan.tousimojarad@arm.com def body(env): 16812149Sashkan.tousimojarad@arm.com ret = TimingExprLet() 16912149Sashkan.tousimojarad@arm.com let_bindings = [] 17012149Sashkan.tousimojarad@arm.com new_env = {} 17112149Sashkan.tousimojarad@arm.com i = 0 17212149Sashkan.tousimojarad@arm.com 17312149Sashkan.tousimojarad@arm.com # Make the sub-expression as null to start with 17412149Sashkan.tousimojarad@arm.com for name, binding in bindings: 17512149Sashkan.tousimojarad@arm.com new_env[name] = i 17612149Sashkan.tousimojarad@arm.com i += 1 17712149Sashkan.tousimojarad@arm.com 17812149Sashkan.tousimojarad@arm.com defns = [] 17912149Sashkan.tousimojarad@arm.com # Then apply them to the produced new env 18013731Sandreas.sandberg@arm.com for i in range(0, len(bindings)): 18112149Sashkan.tousimojarad@arm.com name, binding_expr = bindings[i] 18212149Sashkan.tousimojarad@arm.com defns.append(binding_expr(new_env)) 18312149Sashkan.tousimojarad@arm.com 18412149Sashkan.tousimojarad@arm.com ret.defns = defns 18512149Sashkan.tousimojarad@arm.com ret.expr = expr(new_env) 18612149Sashkan.tousimojarad@arm.com 18712149Sashkan.tousimojarad@arm.com return ret 18812149Sashkan.tousimojarad@arm.com return body 18912149Sashkan.tousimojarad@arm.com 19012149Sashkan.tousimojarad@arm.comdef expr_top(expr): 19112149Sashkan.tousimojarad@arm.com return expr([]) 19212149Sashkan.tousimojarad@arm.com 19312149Sashkan.tousimojarad@arm.comclass HPI_DefaultInt(MinorFUTiming): 19412149Sashkan.tousimojarad@arm.com description = 'HPI_DefaultInt' 19512149Sashkan.tousimojarad@arm.com mask, match = any_non_a64_inst 19612149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [3, 3, 2, 2, 2, 1, 0] 19712149Sashkan.tousimojarad@arm.com 19812149Sashkan.tousimojarad@arm.comclass HPI_DefaultA64Int(MinorFUTiming): 19912149Sashkan.tousimojarad@arm.com description = 'HPI_DefaultA64Int' 20012149Sashkan.tousimojarad@arm.com mask, match = any_a64_inst 20112149Sashkan.tousimojarad@arm.com # r, l, (c) 20212149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [2, 2, 2, 0] 20312149Sashkan.tousimojarad@arm.com 20412149Sashkan.tousimojarad@arm.comclass HPI_DefaultMul(MinorFUTiming): 20512149Sashkan.tousimojarad@arm.com description = 'HPI_DefaultMul' 20612149Sashkan.tousimojarad@arm.com mask, match = any_non_a64_inst 20712149Sashkan.tousimojarad@arm.com # f, f, f, r, l, a? 20812149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 0] 20912149Sashkan.tousimojarad@arm.com 21012149Sashkan.tousimojarad@arm.comclass HPI_DefaultA64Mul(MinorFUTiming): 21112149Sashkan.tousimojarad@arm.com description = 'HPI_DefaultA64Mul' 21212149Sashkan.tousimojarad@arm.com mask, match = any_a64_inst 21312149Sashkan.tousimojarad@arm.com # a (zr for mul), l, r 21412149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0] 21512149Sashkan.tousimojarad@arm.com # extraCommitLat = 1 21612149Sashkan.tousimojarad@arm.com 21712149Sashkan.tousimojarad@arm.comclass HPI_DefaultVfp(MinorFUTiming): 21812149Sashkan.tousimojarad@arm.com description = 'HPI_DefaultVfp' 21912149Sashkan.tousimojarad@arm.com mask, match = any_non_a64_inst 22012149Sashkan.tousimojarad@arm.com # cpsr, z, z, z, cpacr, fpexc, l_lo, r_lo, l_hi, r_hi (from vadd2h) 22112149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 0] 22212149Sashkan.tousimojarad@arm.com 22312149Sashkan.tousimojarad@arm.comclass HPI_DefaultA64Vfp(MinorFUTiming): 22412149Sashkan.tousimojarad@arm.com description = 'HPI_DefaultA64Vfp' 22512149Sashkan.tousimojarad@arm.com mask, match = any_a64_inst 22612149Sashkan.tousimojarad@arm.com # cpsr, cpacr_el1, fpscr_exc, ... 22712149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [5, 5, 5, 2] 22812149Sashkan.tousimojarad@arm.com 22912149Sashkan.tousimojarad@arm.comclass HPI_FMADD_A64(MinorFUTiming): 23012149Sashkan.tousimojarad@arm.com description = 'HPI_FMADD_A64' 23112149Sashkan.tousimojarad@arm.com mask, match = a64_opcode('0001_1111_0x0x_xxxx__0xxx_xxxx_xxxx_xxxx') 23212149Sashkan.tousimojarad@arm.com # t 23312149Sashkan.tousimojarad@arm.com # cpsr, cpacr_el1, fpscr_exc, 1, 1, 2, 2, 3, 3, fpscr_exc, d, d, d, d 23412149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [5, 5, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0] 23512149Sashkan.tousimojarad@arm.com 23612149Sashkan.tousimojarad@arm.comclass HPI_FMSUB_D_A64(MinorFUTiming): 23712149Sashkan.tousimojarad@arm.com description = 'HPI_FMSUB_D_A64' 23812149Sashkan.tousimojarad@arm.com mask, match = a64_opcode('0001_1111_0x0x_xxxx__1xxx_xxxx_xxxx_xxxx') 23912149Sashkan.tousimojarad@arm.com # t 24012149Sashkan.tousimojarad@arm.com # cpsr, cpacr_el1, fpscr_exc, 1, 1, 2, 2, 3, 3, fpscr_exc, d, d, d, d 24112149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [5, 5, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0] 24212149Sashkan.tousimojarad@arm.com 24312149Sashkan.tousimojarad@arm.comclass HPI_FMOV_A64(MinorFUTiming): 24412149Sashkan.tousimojarad@arm.com description = 'HPI_FMOV_A64' 24512149Sashkan.tousimojarad@arm.com mask, match = a64_opcode('0001_1110_0x10_0000__0100_00xx_xxxx_xxxx') 24612149Sashkan.tousimojarad@arm.com # cpsr, cpacr_el1, fpscr_exc, 1, 1, 2, 2, 3, 3, fpscr_exc, d, d, d, d 24712149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [5, 5, 5, 0] 24812149Sashkan.tousimojarad@arm.com 24912149Sashkan.tousimojarad@arm.comclass HPI_ADD_SUB_vector_scalar_A64(MinorFUTiming): 25012149Sashkan.tousimojarad@arm.com description = 'HPI_ADD_SUB_vector_scalar_A64' 25112149Sashkan.tousimojarad@arm.com mask, match = a64_opcode('01x1_1110_xx1x_xxxx__1000_01xx_xxxx_xxxx') 25212149Sashkan.tousimojarad@arm.com # cpsr, z, z, z, cpacr, fpexc, l0, r0, l1, r1, l2, r2, l3, r3 (for vadd2h) 25312149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [5, 5, 5, 4] 25412149Sashkan.tousimojarad@arm.com 25512149Sashkan.tousimojarad@arm.com 25612149Sashkan.tousimojarad@arm.comclass HPI_ADD_SUB_vector_vector_A64(MinorFUTiming): 25712149Sashkan.tousimojarad@arm.com description = 'HPI_ADD_SUB_vector_vector_A64' 25812149Sashkan.tousimojarad@arm.com mask, match = a64_opcode('0xx0_1110_xx1x_xxxx__1000_01xx_xxxx_xxxx') 25912149Sashkan.tousimojarad@arm.com # cpsr, z, z, z, cpacr, fpexc, l0, r0, l1, r1, l2, r2, l3, r3 (for vadd2h) 26012149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [5, 5, 5, 4] 26112149Sashkan.tousimojarad@arm.com 26212149Sashkan.tousimojarad@arm.comclass HPI_FDIV_scalar_32_A64(MinorFUTiming): 26312149Sashkan.tousimojarad@arm.com description = 'HPI_FDIV_scalar_32_A64' 26412149Sashkan.tousimojarad@arm.com mask, match = a64_opcode('0001_1110_001x_xxxx__0001_10xx_xxxx_xxxx') 26512149Sashkan.tousimojarad@arm.com extraCommitLat = 6 26612149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 20, 4] 26712149Sashkan.tousimojarad@arm.com 26812149Sashkan.tousimojarad@arm.comclass HPI_FDIV_scalar_64_A64(MinorFUTiming): 26912149Sashkan.tousimojarad@arm.com description = 'HPI_FDIV_scalar_64_A64' 27012149Sashkan.tousimojarad@arm.com mask, match = a64_opcode('0001_1110_011x_xxxx__0001_10xx_xxxx_xxxx') 27112149Sashkan.tousimojarad@arm.com extraCommitLat = 15 27212149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 20, 4] 27312149Sashkan.tousimojarad@arm.com 27412149Sashkan.tousimojarad@arm.com# CINC CINV CSEL CSET CSETM CSINC CSINC CSINV CSINV CSNEG 27512149Sashkan.tousimojarad@arm.comclass HPI_Cxxx_A64(MinorFUTiming): 27612149Sashkan.tousimojarad@arm.com description = 'HPI_Cxxx_A64' 27712149Sashkan.tousimojarad@arm.com mask, match = a64_opcode('xx01_1010_100x_xxxx_xxxx__0xxx_xxxx_xxxx') 27812149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [3, 3, 3, 2, 2] 27912149Sashkan.tousimojarad@arm.com 28012149Sashkan.tousimojarad@arm.comclass HPI_DefaultMem(MinorFUTiming): 28112149Sashkan.tousimojarad@arm.com description = 'HPI_DefaultMem' 28212149Sashkan.tousimojarad@arm.com mask, match = any_non_a64_inst 28312149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [1, 1, 1, 1, 1, 2] 28412149Sashkan.tousimojarad@arm.com # Assume that LDR/STR take 2 cycles for resolving dependencies 28512149Sashkan.tousimojarad@arm.com # (1 + 1 of the FU) 28612149Sashkan.tousimojarad@arm.com extraAssumedLat = 2 28712149Sashkan.tousimojarad@arm.com 28812149Sashkan.tousimojarad@arm.comclass HPI_DefaultMem64(MinorFUTiming): 28912149Sashkan.tousimojarad@arm.com description = 'HPI_DefaultMem64' 29012149Sashkan.tousimojarad@arm.com mask, match = any_a64_inst 29112149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [2] 29212149Sashkan.tousimojarad@arm.com # Assume that LDR/STR take 2 cycles for resolving dependencies 29312149Sashkan.tousimojarad@arm.com # (1 + 1 of the FU) 29412149Sashkan.tousimojarad@arm.com extraAssumedLat = 3 29512149Sashkan.tousimojarad@arm.com 29612149Sashkan.tousimojarad@arm.comclass HPI_DataProcessingMovShiftr(MinorFUTiming): 29712149Sashkan.tousimojarad@arm.com description = 'HPI_DataProcessingMovShiftr' 29812149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0001_101x_xxxx__xxxx_xxxx_xxx1_xxxx') 29912149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [3, 3, 2, 2, 2, 1, 0] 30012149Sashkan.tousimojarad@arm.com 30112149Sashkan.tousimojarad@arm.comclass HPI_DataProcessingMayShift(MinorFUTiming): 30212149Sashkan.tousimojarad@arm.com description = 'HPI_DataProcessingMayShift' 30312149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_000x_xxxx_xxxx__xxxx_xxxx_xxxx_xxxx') 30412149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [3, 3, 2, 2, 1, 1, 0] 30512149Sashkan.tousimojarad@arm.com 30612149Sashkan.tousimojarad@arm.comclass HPI_DataProcessingNoShift(MinorFUTiming): 30712149Sashkan.tousimojarad@arm.com description = 'HPI_DataProcessingNoShift' 30812149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_000x_xxxx_xxxx__xxxx_0000_0xx0_xxxx') 30912149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [3, 3, 2, 2, 2, 1, 0] 31012149Sashkan.tousimojarad@arm.com 31112149Sashkan.tousimojarad@arm.comclass HPI_DataProcessingAllowShifti(MinorFUTiming): 31212149Sashkan.tousimojarad@arm.com description = 'HPI_DataProcessingAllowShifti' 31312149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_000x_xxxx_xxxx__xxxx_xxxx_xxx0_xxxx') 31412149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [3, 3, 2, 2, 1, 1, 0] 31512149Sashkan.tousimojarad@arm.com 31612149Sashkan.tousimojarad@arm.comclass HPI_DataProcessingSuppressShift(MinorFUTiming): 31712149Sashkan.tousimojarad@arm.com description = 'HPI_DataProcessingSuppressShift' 31812149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_000x_xxxx_xxxx__xxxx_xxxx_xxxx_xxxx') 31912149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [] 32012149Sashkan.tousimojarad@arm.com suppress = True 32112149Sashkan.tousimojarad@arm.com 32212149Sashkan.tousimojarad@arm.comclass HPI_DataProcessingSuppressBranch(MinorFUTiming): 32312149Sashkan.tousimojarad@arm.com description = 'HPI_DataProcessingSuppressBranch' 32412149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_1010_xxxx_xxxx__xxxx_xxxx_xxxx_xxxx') 32512149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [] 32612149Sashkan.tousimojarad@arm.com suppress = True 32712149Sashkan.tousimojarad@arm.com 32812149Sashkan.tousimojarad@arm.comclass HPI_BFI_T1(MinorFUTiming): 32912149Sashkan.tousimojarad@arm.com description = 'HPI_BFI_T1' 33012149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_0x11_0110_xxxx__0xxx_xxxx_xxxx_xxxx') 33112149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 1, 0] 33212149Sashkan.tousimojarad@arm.com 33312149Sashkan.tousimojarad@arm.comclass HPI_BFI_A1(MinorFUTiming): 33412149Sashkan.tousimojarad@arm.com description = 'HPI_BFI_A1' 33512149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0111_110x_xxxx__xxxx_xxxx_x001_xxxx') 33612149Sashkan.tousimojarad@arm.com # f, f, f, dest, src 33712149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 1, 0] 33812149Sashkan.tousimojarad@arm.com 33912149Sashkan.tousimojarad@arm.comclass HPI_CLZ_T1(MinorFUTiming): 34012149Sashkan.tousimojarad@arm.com description = 'HPI_CLZ_T1' 34112149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1010_1011_xxxx__1111_xxxx_1000_xxxx') 34212149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [3, 3, 2, 2, 2, 1, 0] 34312149Sashkan.tousimojarad@arm.com 34412149Sashkan.tousimojarad@arm.comclass HPI_CLZ_A1(MinorFUTiming): 34512149Sashkan.tousimojarad@arm.com description = 'HPI_CLZ_A1' 34612149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0001_0110_xxxx__xxxx_xxxx_0001_xxxx') 34712149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [3, 3, 2, 2, 2, 1, 0] 34812149Sashkan.tousimojarad@arm.com 34912149Sashkan.tousimojarad@arm.comclass HPI_CMN_immediate_A1(MinorFUTiming): 35012149Sashkan.tousimojarad@arm.com description = 'HPI_CMN_immediate_A1' 35112149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0011_0111_xxxx__xxxx_xxxx_xxxx_xxxx') 35212149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [3, 3, 3, 2, 2, 3, 3, 3, 0] 35312149Sashkan.tousimojarad@arm.com 35412149Sashkan.tousimojarad@arm.comclass HPI_CMN_register_A1(MinorFUTiming): 35512149Sashkan.tousimojarad@arm.com description = 'HPI_CMN_register_A1' 35612149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0001_0111_xxxx__xxxx_xxxx_xxx0_xxxx') 35712149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [3, 3, 3, 2, 2, 3, 3, 3, 0] 35812149Sashkan.tousimojarad@arm.com 35912149Sashkan.tousimojarad@arm.comclass HPI_CMP_immediate_A1(MinorFUTiming): 36012149Sashkan.tousimojarad@arm.com description = 'HPI_CMP_immediate_A1' 36112149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0011_0101_xxxx__xxxx_xxxx_xxxx_xxxx') 36212149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [3, 3, 3, 2, 2, 3, 3, 3, 0] 36312149Sashkan.tousimojarad@arm.com 36412149Sashkan.tousimojarad@arm.comclass HPI_CMP_register_A1(MinorFUTiming): 36512149Sashkan.tousimojarad@arm.com description = 'HPI_CMP_register_A1' 36612149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0001_0101_xxxx__xxxx_xxxx_xxx0_xxxx') 36712149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [3, 3, 3, 2, 2, 3, 3, 3, 0] 36812149Sashkan.tousimojarad@arm.com 36912149Sashkan.tousimojarad@arm.comclass HPI_MLA_T1(MinorFUTiming): 37012149Sashkan.tousimojarad@arm.com description = 'HPI_MLA_T1' 37112149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_0000_xxxx__xxxx_xxxx_0000_xxxx') 37212149Sashkan.tousimojarad@arm.com # z, z, z, a, l?, r? 37312149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 2, 0] 37412149Sashkan.tousimojarad@arm.com 37512149Sashkan.tousimojarad@arm.comclass HPI_MLA_A1(MinorFUTiming): 37612149Sashkan.tousimojarad@arm.com description = 'HPI_MLA_A1' 37712149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0000_001x_xxxx__xxxx_xxxx_1001_xxxx') 37812149Sashkan.tousimojarad@arm.com # z, z, z, a, l?, r? 37912149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 2, 0] 38012149Sashkan.tousimojarad@arm.com 38112149Sashkan.tousimojarad@arm.comclass HPI_MADD_A64(MinorFUTiming): 38212149Sashkan.tousimojarad@arm.com description = 'HPI_MADD_A64' 38312149Sashkan.tousimojarad@arm.com mask, match = a64_opcode('x001_1011_000x_xxxx__0xxx_xxxx_xxxx_xxxx') 38412149Sashkan.tousimojarad@arm.com # a, l?, r? 38512149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [1, 1, 1, 0] 38612149Sashkan.tousimojarad@arm.com extraCommitLat = 1 38712149Sashkan.tousimojarad@arm.com 38812149Sashkan.tousimojarad@arm.comclass HPI_MLS_T1(MinorFUTiming): 38912149Sashkan.tousimojarad@arm.com description = 'HPI_MLS_T1' 39012149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_0000_xxxx__xxxx_xxxx_0001_xxxx') 39112149Sashkan.tousimojarad@arm.com # z, z, z, l?, a, r? 39212149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 2, 0, 0, 0] 39312149Sashkan.tousimojarad@arm.com 39412149Sashkan.tousimojarad@arm.comclass HPI_MLS_A1(MinorFUTiming): 39512149Sashkan.tousimojarad@arm.com description = 'HPI_MLS_A1' 39612149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0000_0110_xxxx__xxxx_xxxx_1001_xxxx') 39712149Sashkan.tousimojarad@arm.com # z, z, z, l?, a, r? 39812149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 2, 0, 0, 0] 39912149Sashkan.tousimojarad@arm.com 40012149Sashkan.tousimojarad@arm.comclass HPI_MOVT_A1(MinorFUTiming): 40112149Sashkan.tousimojarad@arm.com description = 'HPI_MOVT_A1' 40212149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('xxxx_0010_0100_xxxx__xxxx_xxxx_xxxx_xxxx') 40312149Sashkan.tousimojarad@arm.com 40412149Sashkan.tousimojarad@arm.comclass HPI_MUL_T1(MinorFUTiming): 40512149Sashkan.tousimojarad@arm.com description = 'HPI_MUL_T1' 40612149Sashkan.tousimojarad@arm.com mask, match = t16_opcode('0100_0011_01xx_xxxx') 40712149Sashkan.tousimojarad@arm.comclass HPI_MUL_T2(MinorFUTiming): 40812149Sashkan.tousimojarad@arm.com description = 'HPI_MUL_T2' 40912149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_0000_xxxx_1111_xxxx_0000_xxxx') 41012149Sashkan.tousimojarad@arm.com 41112149Sashkan.tousimojarad@arm.comclass HPI_PKH_T1(MinorFUTiming): 41212149Sashkan.tousimojarad@arm.com description = 'HPI_PKH_T1' 41312149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1110_1010_110x_xxxx__xxxx_xxxx_xxxx_xxxx') 41412149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 2, 1, 0] 41512149Sashkan.tousimojarad@arm.com 41612149Sashkan.tousimojarad@arm.comclass HPI_PKH_A1(MinorFUTiming): 41712149Sashkan.tousimojarad@arm.com description = 'HPI_PKH_A1' 41812149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0110_1000_xxxx__xxxx_xxxx_xx01_xxxx') 41912149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 2, 1, 0] 42012149Sashkan.tousimojarad@arm.com 42112149Sashkan.tousimojarad@arm.comclass HPI_QADD_QSUB_T1(MinorFUTiming): 42212149Sashkan.tousimojarad@arm.com description = 'HPI_QADD_QSUB_T1' 42312149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1010_1000_xxxx__1111_xxxx_10x0_xxxx') 42412149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 1, 0] 42512149Sashkan.tousimojarad@arm.com 42612149Sashkan.tousimojarad@arm.comclass HPI_QADD_QSUB_A1(MinorFUTiming): 42712149Sashkan.tousimojarad@arm.com description = 'HPI_QADD_QSUB_A1' 42812149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0001_00x0_xxxx__xxxx_xxxx_0101_xxxx') 42912149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 1, 0] 43012149Sashkan.tousimojarad@arm.com 43112149Sashkan.tousimojarad@arm.com# T1 QADD16 QADD8 QSUB16 QSUB8 UQADD16 UQADD8 UQSUB16 UQSUB8 43212149Sashkan.tousimojarad@arm.comclass HPI_QADD_ETC_T1(MinorFUTiming): 43312149Sashkan.tousimojarad@arm.com description = 'HPI_QADD_ETC_T1' 43412149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1010_1x0x_xxxx__1111_xxxx_0x01_xxxx') 43512149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 1, 0] 43612149Sashkan.tousimojarad@arm.com 43712149Sashkan.tousimojarad@arm.com# A1 QADD16 QADD8 QSAX QSUB16 QSUB8 UQADD16 UQADD8 UQASX UQSAX UQSUB16 UQSUB8 43812149Sashkan.tousimojarad@arm.comclass HPI_QADD_ETC_A1(MinorFUTiming): 43912149Sashkan.tousimojarad@arm.com description = 'HPI_QADD_ETC_A1' 44012149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0110_0x10_xxxx__xxxx_xxxx_xxx1_xxxx') 44112149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 1, 0] 44212149Sashkan.tousimojarad@arm.com 44312149Sashkan.tousimojarad@arm.comclass HPI_QASX_QSAX_UQASX_UQSAX_T1(MinorFUTiming): 44412149Sashkan.tousimojarad@arm.com description = 'HPI_QASX_QSAX_UQASX_UQSAX_T1' 44512149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1010_1x10_xxxx__1111_xxxx_0x01_xxxx') 44612149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 1, 0] 44712149Sashkan.tousimojarad@arm.com 44812149Sashkan.tousimojarad@arm.comclass HPI_QDADD_QDSUB_T1(MinorFUTiming): 44912149Sashkan.tousimojarad@arm.com description = 'HPI_QDADD_QDSUB_T1' 45012149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1010_1000_xxxx__1111_xxxx_10x1_xxxx') 45112149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 1, 0] 45212149Sashkan.tousimojarad@arm.com 45312149Sashkan.tousimojarad@arm.comclass HPI_QDADD_QDSUB_A1(MinorFUTiming): 45412149Sashkan.tousimojarad@arm.com description = 'HPI_QDADD_QSUB_A1' 45512149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0001_01x0_xxxx__xxxx_xxxx_0101_xxxx') 45612149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 1, 0] 45712149Sashkan.tousimojarad@arm.com 45812149Sashkan.tousimojarad@arm.comclass HPI_RBIT_A1(MinorFUTiming): 45912149Sashkan.tousimojarad@arm.com description = 'HPI_RBIT_A1' 46012149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0110_1111_xxxx__xxxx_xxxx_0011_xxxx') 46112149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 0] 46212149Sashkan.tousimojarad@arm.com 46312149Sashkan.tousimojarad@arm.comclass HPI_REV_REV16_A1(MinorFUTiming): 46412149Sashkan.tousimojarad@arm.com description = 'HPI_REV_REV16_A1' 46512149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0110_1011_xxxx__xxxx_xxxx_x011_xxxx') 46612149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 0] 46712149Sashkan.tousimojarad@arm.com 46812149Sashkan.tousimojarad@arm.comclass HPI_REVSH_A1(MinorFUTiming): 46912149Sashkan.tousimojarad@arm.com description = 'HPI_REVSH_A1' 47012149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0110_1111_xxxx__xxxx_xxxx_1011_xxxx') 47112149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 0] 47212149Sashkan.tousimojarad@arm.com 47312149Sashkan.tousimojarad@arm.comclass HPI_ADD_ETC_A1(MinorFUTiming): 47412149Sashkan.tousimojarad@arm.com description = 'HPI_ADD_ETC_A1' 47512149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0110_0xx1_xxxx__xxxx_xxxx_x001_xxxx') 47612149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 2, 2, 0] 47712149Sashkan.tousimojarad@arm.com 47812149Sashkan.tousimojarad@arm.comclass HPI_ADD_ETC_T1(MinorFUTiming): 47912149Sashkan.tousimojarad@arm.com description = 'HPI_ADD_ETC_A1' 48012149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1010_100x_xxxx__1111_xxxx_0xx0_xxxx') 48112149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 2, 2, 0] 48212149Sashkan.tousimojarad@arm.com 48312149Sashkan.tousimojarad@arm.comclass HPI_SASX_SHASX_UASX_UHASX_A1(MinorFUTiming): 48412149Sashkan.tousimojarad@arm.com description = 'HPI_SASX_SHASX_UASX_UHASX_A1' 48512149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0110_0xx1_xxxx__xxxx_xxxx_0011_xxxx') 48612149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [3, 3, 2, 2, 2, 1, 0] 48712149Sashkan.tousimojarad@arm.com 48812149Sashkan.tousimojarad@arm.comclass HPI_SBFX_UBFX_A1(MinorFUTiming): 48912149Sashkan.tousimojarad@arm.com description = 'HPI_SBFX_UBFX_A1' 49012149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0111_1x1x_xxxx__xxxx_xxxx_x101_xxxx') 49112149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 0] 49212149Sashkan.tousimojarad@arm.com 49312149Sashkan.tousimojarad@arm.com### SDIV 49412149Sashkan.tousimojarad@arm.com 49512149Sashkan.tousimojarad@arm.comsdiv_lat_expr = expr_top(let([ 49612149Sashkan.tousimojarad@arm.com ('left', un('SignExtend32To64', int_reg(src(4)))), 49712149Sashkan.tousimojarad@arm.com ('right', un('SignExtend32To64', int_reg(src(3)))), 49812149Sashkan.tousimojarad@arm.com ('either_signed', bin('Or', 49912149Sashkan.tousimojarad@arm.com bin('SLessThan', ref('left'), literal(0)), 50012149Sashkan.tousimojarad@arm.com bin('SLessThan', ref('right'), literal(0)))), 50112149Sashkan.tousimojarad@arm.com ('left_size', un('SizeInBits', un('Abs', ref('left')))), 50212149Sashkan.tousimojarad@arm.com ('signed_adjust', if_expr(ref('either_signed'), literal(1), literal(0))), 50312149Sashkan.tousimojarad@arm.com ('right_size', un('SizeInBits', 50412149Sashkan.tousimojarad@arm.com bin('UDiv', un('Abs', ref('right')), 50512149Sashkan.tousimojarad@arm.com if_expr(ref('either_signed'), literal(4), literal(2))))), 50612149Sashkan.tousimojarad@arm.com ('left_minus_right', if_expr( 50712149Sashkan.tousimojarad@arm.com bin('SLessThan', ref('left_size'), ref('right_size')), 50812149Sashkan.tousimojarad@arm.com literal(0), 50912149Sashkan.tousimojarad@arm.com bin('Sub', ref('left_size'), ref('right_size')))) 51012149Sashkan.tousimojarad@arm.com ], 51112149Sashkan.tousimojarad@arm.com bin('Add', 51212149Sashkan.tousimojarad@arm.com ref('signed_adjust'), 51312149Sashkan.tousimojarad@arm.com if_expr(bin('Equal', ref('right'), literal(0)), 51412149Sashkan.tousimojarad@arm.com literal(0), 51512149Sashkan.tousimojarad@arm.com bin('UDiv', ref('left_minus_right'), literal(4)))) 51612149Sashkan.tousimojarad@arm.com )) 51712149Sashkan.tousimojarad@arm.com 51812149Sashkan.tousimojarad@arm.comsdiv_lat_expr64 = expr_top(let([ 51912149Sashkan.tousimojarad@arm.com ('left', un('SignExtend32To64', int_reg(src(0)))), 52012149Sashkan.tousimojarad@arm.com ('right', un('SignExtend32To64', int_reg(src(1)))), 52112149Sashkan.tousimojarad@arm.com ('either_signed', bin('Or', 52212149Sashkan.tousimojarad@arm.com bin('SLessThan', ref('left'), literal(0)), 52312149Sashkan.tousimojarad@arm.com bin('SLessThan', ref('right'), literal(0)))), 52412149Sashkan.tousimojarad@arm.com ('left_size', un('SizeInBits', un('Abs', ref('left')))), 52512149Sashkan.tousimojarad@arm.com ('signed_adjust', if_expr(ref('either_signed'), literal(1), literal(0))), 52612149Sashkan.tousimojarad@arm.com ('right_size', un('SizeInBits', 52712149Sashkan.tousimojarad@arm.com bin('UDiv', un('Abs', ref('right')), 52812149Sashkan.tousimojarad@arm.com if_expr(ref('either_signed'), literal(4), literal(2))))), 52912149Sashkan.tousimojarad@arm.com ('left_minus_right', if_expr( 53012149Sashkan.tousimojarad@arm.com bin('SLessThan', ref('left_size'), ref('right_size')), 53112149Sashkan.tousimojarad@arm.com literal(0), 53212149Sashkan.tousimojarad@arm.com bin('Sub', ref('left_size'), ref('right_size')))) 53312149Sashkan.tousimojarad@arm.com ], 53412149Sashkan.tousimojarad@arm.com bin('Add', 53512149Sashkan.tousimojarad@arm.com ref('signed_adjust'), 53612149Sashkan.tousimojarad@arm.com if_expr(bin('Equal', ref('right'), literal(0)), 53712149Sashkan.tousimojarad@arm.com literal(0), 53812149Sashkan.tousimojarad@arm.com bin('UDiv', ref('left_minus_right'), literal(4)))) 53912149Sashkan.tousimojarad@arm.com )) 54012149Sashkan.tousimojarad@arm.com 54112149Sashkan.tousimojarad@arm.comclass HPI_SDIV_A1(MinorFUTiming): 54212149Sashkan.tousimojarad@arm.com description = 'HPI_SDIV_A1' 54312149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0111_0001_xxxx__xxxx_xxxx_0001_xxxx') 54412149Sashkan.tousimojarad@arm.com extraCommitLat = 0 54512149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [] 54612149Sashkan.tousimojarad@arm.com extraCommitLatExpr = sdiv_lat_expr 54712149Sashkan.tousimojarad@arm.com 54812149Sashkan.tousimojarad@arm.comclass HPI_SDIV_A64(MinorFUTiming): 54912149Sashkan.tousimojarad@arm.com description = 'HPI_SDIV_A64' 55012149Sashkan.tousimojarad@arm.com mask, match = a64_opcode('x001_1010_110x_xxxx__0000_11xx_xxxx_xxxx') 55112149Sashkan.tousimojarad@arm.com extraCommitLat = 0 55212149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [] 55312149Sashkan.tousimojarad@arm.com extraCommitLatExpr = sdiv_lat_expr64 55412149Sashkan.tousimojarad@arm.com 55512149Sashkan.tousimojarad@arm.com### SEL 55612149Sashkan.tousimojarad@arm.com 55712149Sashkan.tousimojarad@arm.comclass HPI_SEL_A1(MinorFUTiming): 55812149Sashkan.tousimojarad@arm.com description = 'HPI_SEL_A1' 55912149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0110_1000_xxxx__xxxx_xxxx_1011_xxxx') 56012149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 2, 2, 0] 56112149Sashkan.tousimojarad@arm.com 56212149Sashkan.tousimojarad@arm.comclass HPI_SEL_A1_Suppress(MinorFUTiming): 56312149Sashkan.tousimojarad@arm.com description = 'HPI_SEL_A1_Suppress' 56412149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0110_1000_xxxx__xxxx_xxxx_1011_xxxx') 56512149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [] 56612149Sashkan.tousimojarad@arm.com suppress = True 56712149Sashkan.tousimojarad@arm.com 56812149Sashkan.tousimojarad@arm.comclass HPI_SHSAX_SSAX_UHSAX_USAX_A1(MinorFUTiming): 56912149Sashkan.tousimojarad@arm.com description = 'HPI_SHSAX_SSAX_UHSAX_USAX_A1' 57012149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0110_0xx1_xxxx__xxxx_xxxx_0101_xxxx') 57112149Sashkan.tousimojarad@arm.com # As Default 57212149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [3, 3, 2, 2, 2, 1, 0] 57312149Sashkan.tousimojarad@arm.com 57412149Sashkan.tousimojarad@arm.comclass HPI_USUB_ETC_A1(MinorFUTiming): 57512149Sashkan.tousimojarad@arm.com description = 'HPI_USUB_ETC_A1' 57612149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0110_0xx1_xxxx__xxxx_xxxx_x111_xxxx') 57712149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 2, 2, 0] 57812149Sashkan.tousimojarad@arm.com 57912149Sashkan.tousimojarad@arm.comclass HPI_SMLABB_T1(MinorFUTiming): 58012149Sashkan.tousimojarad@arm.com description = 'HPI_SMLABB_T1' 58112149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_0001_xxxx__xxxx_xxxx_00xx_xxxx') 58212149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 2, 0] 58312149Sashkan.tousimojarad@arm.com 58412149Sashkan.tousimojarad@arm.comclass HPI_SMLABB_A1(MinorFUTiming): 58512149Sashkan.tousimojarad@arm.com description = 'HPI_SMLABB_A1' 58612149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0001_0000_xxxx__xxxx_xxxx_1xx0_xxxx') 58712149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 2, 0] 58812149Sashkan.tousimojarad@arm.com 58912149Sashkan.tousimojarad@arm.comclass HPI_SMLAD_T1(MinorFUTiming): 59012149Sashkan.tousimojarad@arm.com description = 'HPI_SMLAD_T1' 59112149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_0010_xxxx__xxxx_xxxx_000x_xxxx') 59212149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 2, 0] 59312149Sashkan.tousimojarad@arm.com 59412149Sashkan.tousimojarad@arm.comclass HPI_SMLAD_A1(MinorFUTiming): 59512149Sashkan.tousimojarad@arm.com description = 'HPI_SMLAD_A1' 59612149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0111_0000_xxxx__xxxx_xxxx_00x1_xxxx') 59712149Sashkan.tousimojarad@arm.com # z, z, z, l, r, a 59812149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 2, 0] 59912149Sashkan.tousimojarad@arm.com 60012149Sashkan.tousimojarad@arm.comclass HPI_SMLAL_T1(MinorFUTiming): 60112149Sashkan.tousimojarad@arm.com description = 'HPI_SMLAL_T1' 60212149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_1100_xxxx__xxxx_xxxx_0000_xxxx') 60312149Sashkan.tousimojarad@arm.comclass HPI_SMLAL_A1(MinorFUTiming): 60412149Sashkan.tousimojarad@arm.com description = 'HPI_SMLAL_A1' 60512149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0000_111x_xxxx__xxxx_xxxx_1001_xxxx') 60612149Sashkan.tousimojarad@arm.com 60712149Sashkan.tousimojarad@arm.comclass HPI_SMLALBB_T1(MinorFUTiming): 60812149Sashkan.tousimojarad@arm.com description = 'HPI_SMLALBB_T1' 60912149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_1100_xxxx__xxxx_xxxx_10xx_xxxx') 61012149Sashkan.tousimojarad@arm.comclass HPI_SMLALBB_A1(MinorFUTiming): 61112149Sashkan.tousimojarad@arm.com description = 'HPI_SMLALBB_A1' 61212149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0001_0100_xxxx__xxxx_xxxx_1xx0_xxxx') 61312149Sashkan.tousimojarad@arm.com 61412149Sashkan.tousimojarad@arm.comclass HPI_SMLALD_T1(MinorFUTiming): 61512149Sashkan.tousimojarad@arm.com description = 'HPI_SMLALD_T1' 61612149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_1100_xxxx__xxxx_xxxx_110x_xxxx') 61712149Sashkan.tousimojarad@arm.comclass HPI_SMLALD_A1(MinorFUTiming): 61812149Sashkan.tousimojarad@arm.com description = 'HPI_SMLALD_A1' 61912149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0111_0100_xxxx__xxxx_xxxx_00x1_xxxx') 62012149Sashkan.tousimojarad@arm.com 62112149Sashkan.tousimojarad@arm.comclass HPI_SMLAWB_T1(MinorFUTiming): 62212149Sashkan.tousimojarad@arm.com description = 'HPI_SMLAWB_T1' 62312149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_0011_xxxx__xxxx_xxxx_000x_xxxx') 62412149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 2, 0] 62512149Sashkan.tousimojarad@arm.com 62612149Sashkan.tousimojarad@arm.comclass HPI_SMLAWB_A1(MinorFUTiming): 62712149Sashkan.tousimojarad@arm.com description = 'HPI_SMLAWB_A1' 62812149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0001_0010_xxxx__xxxx_xxxx_1x00_xxxx') 62912149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 2, 0] 63012149Sashkan.tousimojarad@arm.com 63112149Sashkan.tousimojarad@arm.comclass HPI_SMLSD_A1(MinorFUTiming): 63212149Sashkan.tousimojarad@arm.com description = 'HPI_SMLSD_A1' 63312149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0111_0000_xxxx__xxxx_xxxx_01x1_xxxx') 63412149Sashkan.tousimojarad@arm.com 63512149Sashkan.tousimojarad@arm.comclass HPI_SMLSLD_T1(MinorFUTiming): 63612149Sashkan.tousimojarad@arm.com description = 'HPI_SMLSLD_T1' 63712149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_1101_xxxx__xxxx_xxxx_110x_xxxx') 63812149Sashkan.tousimojarad@arm.comclass HPI_SMLSLD_A1(MinorFUTiming): 63912149Sashkan.tousimojarad@arm.com description = 'HPI_SMLSLD_A1' 64012149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0111_0100_xxxx__xxxx_xxxx_01x1_xxxx') 64112149Sashkan.tousimojarad@arm.com 64212149Sashkan.tousimojarad@arm.comclass HPI_SMMLA_T1(MinorFUTiming): 64312149Sashkan.tousimojarad@arm.com description = 'HPI_SMMLA_T1' 64412149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_0101_xxxx__xxxx_xxxx_000x_xxxx') 64512149Sashkan.tousimojarad@arm.com # ^^^^ != 1111 64612149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 2, 0, 0, 0] 64712149Sashkan.tousimojarad@arm.com 64812149Sashkan.tousimojarad@arm.comclass HPI_SMMLA_A1(MinorFUTiming): 64912149Sashkan.tousimojarad@arm.com description = 'HPI_SMMLA_A1' 65012149Sashkan.tousimojarad@arm.com # Note that this must be after the encoding for SMMUL 65112149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0111_0101_xxxx__xxxx_xxxx_00x1_xxxx') 65212149Sashkan.tousimojarad@arm.com # ^^^^ != 1111 65312149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 2, 0, 0, 0] 65412149Sashkan.tousimojarad@arm.com 65512149Sashkan.tousimojarad@arm.comclass HPI_SMMLS_T1(MinorFUTiming): 65612149Sashkan.tousimojarad@arm.com description = 'HPI_SMMLS_T1' 65712149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_0110_xxxx__xxxx_xxxx_000x_xxxx') 65812149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 2, 0, 0, 0] 65912149Sashkan.tousimojarad@arm.com 66012149Sashkan.tousimojarad@arm.comclass HPI_SMMLS_A1(MinorFUTiming): 66112149Sashkan.tousimojarad@arm.com description = 'HPI_SMMLS_A1' 66212149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0111_0101_xxxx__xxxx_xxxx_11x1_xxxx') 66312149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 2, 0, 0, 0] 66412149Sashkan.tousimojarad@arm.com 66512149Sashkan.tousimojarad@arm.comclass HPI_SMMUL_T1(MinorFUTiming): 66612149Sashkan.tousimojarad@arm.com description = 'HPI_SMMUL_T1' 66712149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_0101_xxxx__1111_xxxx_000x_xxxx') 66812149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0] 66912149Sashkan.tousimojarad@arm.com 67012149Sashkan.tousimojarad@arm.comclass HPI_SMMUL_A1(MinorFUTiming): 67112149Sashkan.tousimojarad@arm.com description = 'HPI_SMMUL_A1' 67212149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0111_0101_xxxx__1111_xxxx_00x1_xxxx') 67312149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0] 67412149Sashkan.tousimojarad@arm.com 67512149Sashkan.tousimojarad@arm.comclass HPI_SMUAD_T1(MinorFUTiming): 67612149Sashkan.tousimojarad@arm.com description = 'HPI_SMUAD_T1' 67712149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_0010_xxxx__1111_xxxx_000x_xxxx') 67812149Sashkan.tousimojarad@arm.comclass HPI_SMUAD_A1(MinorFUTiming): 67912149Sashkan.tousimojarad@arm.com description = 'HPI_SMUAD_A1' 68012149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0111_0000_xxxx__1111_xxxx_00x1_xxxx') 68112149Sashkan.tousimojarad@arm.com 68212149Sashkan.tousimojarad@arm.comclass HPI_SMULBB_T1(MinorFUTiming): 68312149Sashkan.tousimojarad@arm.com description = 'HPI_SMULBB_T1' 68412149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_0001_xxxx__1111_xxxx_00xx_xxxx') 68512149Sashkan.tousimojarad@arm.comclass HPI_SMULBB_A1(MinorFUTiming): 68612149Sashkan.tousimojarad@arm.com description = 'HPI_SMULBB_A1' 68712149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0001_0110_xxxx__xxxx_xxxx_1xx0_xxxx') 68812149Sashkan.tousimojarad@arm.com 68912149Sashkan.tousimojarad@arm.comclass HPI_SMULL_T1(MinorFUTiming): 69012149Sashkan.tousimojarad@arm.com description = 'HPI_SMULL_T1' 69112149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_1000_xxxx__xxxx_xxxx_0000_xxxx') 69212149Sashkan.tousimojarad@arm.comclass HPI_SMULL_A1(MinorFUTiming): 69312149Sashkan.tousimojarad@arm.com description = 'HPI_SMULL_A1' 69412149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0000_110x_xxxx__xxxx_xxxx_1001_xxxx') 69512149Sashkan.tousimojarad@arm.com 69612149Sashkan.tousimojarad@arm.comclass HPI_SMULWB_T1(MinorFUTiming): 69712149Sashkan.tousimojarad@arm.com description = 'HPI_SMULWB_T1' 69812149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_0011_xxxx__1111_xxxx_000x_xxxx') 69912149Sashkan.tousimojarad@arm.comclass HPI_SMULWB_A1(MinorFUTiming): 70012149Sashkan.tousimojarad@arm.com description = 'HPI_SMULWB_A1' 70112149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0001_0010_xxxx__xxxx_xxxx_1x10_xxxx') 70212149Sashkan.tousimojarad@arm.com 70312149Sashkan.tousimojarad@arm.comclass HPI_SMUSD_T1(MinorFUTiming): 70412149Sashkan.tousimojarad@arm.com description = 'HPI_SMUSD_T1' 70512149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_0100_xxxx__1111_xxxx_000x_xxxx') 70612149Sashkan.tousimojarad@arm.comclass HPI_SMUSD_A1(MinorFUTiming): 70712149Sashkan.tousimojarad@arm.com description = 'HPI_SMUSD_A1' 70812149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0111_0000_xxxx__1111_xxxx_01x1_xxxx') 70912149Sashkan.tousimojarad@arm.com 71012149Sashkan.tousimojarad@arm.comclass HPI_SSAT_USAT_no_shift_A1(MinorFUTiming): 71112149Sashkan.tousimojarad@arm.com description = 'HPI_SSAT_USAT_no_shift_A1' 71212149Sashkan.tousimojarad@arm.com # Order *before* shift 71312149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0110_1x1x_xxxx__xxxx_0000_0001_xxxx') 71412149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 2, 0] 71512149Sashkan.tousimojarad@arm.com 71612149Sashkan.tousimojarad@arm.comclass HPI_SSAT_USAT_shift_A1(MinorFUTiming): 71712149Sashkan.tousimojarad@arm.com description = 'HPI_SSAT_USAT_shift_A1' 71812149Sashkan.tousimojarad@arm.com # Order after shift 71912149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0110_1x1x_xxxx__xxxx_xxxx_xx01_xxxx') 72012149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 0] 72112149Sashkan.tousimojarad@arm.com 72212149Sashkan.tousimojarad@arm.comclass HPI_SSAT16_USAT16_A1(MinorFUTiming): 72312149Sashkan.tousimojarad@arm.com description = 'HPI_SSAT16_USAT16_A1' 72412149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0110_1x10_xxxx__xxxx_xxxx_0011_xxxx') 72512149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 2, 0] 72612149Sashkan.tousimojarad@arm.com 72712149Sashkan.tousimojarad@arm.comclass HPI_SXTAB_T1(MinorFUTiming): 72812149Sashkan.tousimojarad@arm.com description = 'HPI_SXTAB_T1' 72912149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1010_0100_xxxx__1111_xxxx_1xxx_xxxx') 73012149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 2, 0] 73112149Sashkan.tousimojarad@arm.com 73212149Sashkan.tousimojarad@arm.comclass HPI_SXTAB_SXTAB16_SXTAH_UXTAB_UXTAB16_UXTAH_A1(MinorFUTiming): 73312149Sashkan.tousimojarad@arm.com description = 'HPI_SXTAB_SXTAB16_SXTAH_UXTAB_UXTAB16_UXTAH_A1' 73412149Sashkan.tousimojarad@arm.com # Place AFTER HPI_SXTB_SXTB16_SXTH_UXTB_UXTB16_UXTH_A1 73512149Sashkan.tousimojarad@arm.com # e6[9d][^f]0070 are undefined 73612149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0110_1xxx_xxxx__xxxx_xxxx_0111_xxxx') 73712149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 2, 0] 73812149Sashkan.tousimojarad@arm.com 73912149Sashkan.tousimojarad@arm.comclass HPI_SXTAB16_T1(MinorFUTiming): 74012149Sashkan.tousimojarad@arm.com description = 'HPI_SXTAB16_T1' 74112149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1010_0010_xxxx__1111_xxxx_1xxx_xxxx') 74212149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 2, 0] 74312149Sashkan.tousimojarad@arm.com 74412149Sashkan.tousimojarad@arm.comclass HPI_SXTAH_T1(MinorFUTiming): 74512149Sashkan.tousimojarad@arm.com description = 'HPI_SXTAH_T1' 74612149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1010_0000_xxxx__1111_xxxx_1xxx_xxxx') 74712149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 2, 0] 74812149Sashkan.tousimojarad@arm.com 74912149Sashkan.tousimojarad@arm.comclass HPI_SXTB_T1(MinorFUTiming): 75012149Sashkan.tousimojarad@arm.com description = 'HPI_SXTB_T1' 75112149Sashkan.tousimojarad@arm.com mask, match = t16_opcode('1011_0010_01xx_xxxx') 75212149Sashkan.tousimojarad@arm.comclass HPI_SXTB_T2(MinorFUTiming): 75312149Sashkan.tousimojarad@arm.com description = 'HPI_SXTB_T2' 75412149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1010_0100_1111__1111_xxxx_1xxx_xxxx') 75512149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 2, 0] 75612149Sashkan.tousimojarad@arm.com 75712149Sashkan.tousimojarad@arm.comclass HPI_SXTB_SXTB16_SXTH_UXTB_UXTB16_UXTH_A1(MinorFUTiming): 75812149Sashkan.tousimojarad@arm.com description = 'HPI_SXTB_SXTB16_SXTH_UXTB_UXTB16_UXTH_A1' 75912149Sashkan.tousimojarad@arm.com # e6[9d]f0070 are undefined 76012149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0110_1xxx_1111__xxxx_xxxx_0111_xxxx') 76112149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 2, 0] 76212149Sashkan.tousimojarad@arm.com 76312149Sashkan.tousimojarad@arm.comclass HPI_SXTB16_T1(MinorFUTiming): 76412149Sashkan.tousimojarad@arm.com description = 'HPI_SXTB16_T1' 76512149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1010_0010_1111__1111_xxxx_1xxx_xxxx') 76612149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 2, 0] 76712149Sashkan.tousimojarad@arm.com 76812149Sashkan.tousimojarad@arm.comclass HPI_SXTH_T1(MinorFUTiming): 76912149Sashkan.tousimojarad@arm.com description = 'HPI_SXTH_T1' 77012149Sashkan.tousimojarad@arm.com mask, match = t16_opcode('1011_0010_00xx_xxxx') 77112149Sashkan.tousimojarad@arm.comclass HPI_SXTH_T2(MinorFUTiming): 77212149Sashkan.tousimojarad@arm.com description = 'HPI_SXTH_T2' 77312149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1010_0000_1111__1111_xxxx_1xxx_xxxx') 77412149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 1, 2, 0] 77512149Sashkan.tousimojarad@arm.com 77612149Sashkan.tousimojarad@arm.comclass HPI_UDIV_T1(MinorFUTiming): 77712149Sashkan.tousimojarad@arm.com description = 'HPI_UDIV_T1' 77812149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_1011_xxxx__xxxx_xxxx_1111_xxxx') 77912149Sashkan.tousimojarad@arm.com 78012149Sashkan.tousimojarad@arm.comudiv_lat_expr = expr_top(let([ 78112149Sashkan.tousimojarad@arm.com ('left', int_reg(src(4))), 78212149Sashkan.tousimojarad@arm.com ('right', int_reg(src(3))), 78312149Sashkan.tousimojarad@arm.com ('left_size', un('SizeInBits', ref('left'))), 78412149Sashkan.tousimojarad@arm.com ('right_size', un('SizeInBits', 78512149Sashkan.tousimojarad@arm.com bin('UDiv', ref('right'), literal(2)))), 78612149Sashkan.tousimojarad@arm.com ('left_minus_right', if_expr( 78712149Sashkan.tousimojarad@arm.com bin('SLessThan', ref('left_size'), ref('right_size')), 78812149Sashkan.tousimojarad@arm.com literal(0), 78912149Sashkan.tousimojarad@arm.com bin('Sub', ref('left_size'), ref('right_size')))) 79012149Sashkan.tousimojarad@arm.com ], 79112149Sashkan.tousimojarad@arm.com if_expr(bin('Equal', ref('right'), literal(0)), 79212149Sashkan.tousimojarad@arm.com literal(0), 79312149Sashkan.tousimojarad@arm.com bin('UDiv', ref('left_minus_right'), literal(4))) 79412149Sashkan.tousimojarad@arm.com )) 79512149Sashkan.tousimojarad@arm.com 79612149Sashkan.tousimojarad@arm.comclass HPI_UDIV_A1(MinorFUTiming): 79712149Sashkan.tousimojarad@arm.com description = 'HPI_UDIV_A1' 79812149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0111_0011_xxxx__xxxx_xxxx_0001_xxxx') 79912149Sashkan.tousimojarad@arm.com extraCommitLat = 0 80012149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [] 80112149Sashkan.tousimojarad@arm.com extraCommitLatExpr = udiv_lat_expr 80212149Sashkan.tousimojarad@arm.com 80312149Sashkan.tousimojarad@arm.comclass HPI_UMAAL_T1(MinorFUTiming): 80412149Sashkan.tousimojarad@arm.com description = 'HPI_UMAAL_T1' 80512149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_1110_xxxx__xxxx_xxxx_0110_xxxx') 80612149Sashkan.tousimojarad@arm.com # z, z, z, dlo, dhi, l, r 80712149Sashkan.tousimojarad@arm.com extraCommitLat = 1 80812149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 0, 0] 80912149Sashkan.tousimojarad@arm.com 81012149Sashkan.tousimojarad@arm.comclass HPI_UMAAL_A1(MinorFUTiming): 81112149Sashkan.tousimojarad@arm.com description = 'HPI_UMAAL_A1' 81212149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0000_0100_xxxx__xxxx_xxxx_1001_xxxx') 81312149Sashkan.tousimojarad@arm.com # z, z, z, dlo, dhi, l, r 81412149Sashkan.tousimojarad@arm.com extraCommitLat = 1 81512149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 0, 0] 81612149Sashkan.tousimojarad@arm.com 81712149Sashkan.tousimojarad@arm.comclass HPI_UMLAL_T1(MinorFUTiming): 81812149Sashkan.tousimojarad@arm.com description = 'HPI_UMLAL_T1' 81912149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_1110_xxxx__xxxx_xxxx_0000_xxxx') 82012149Sashkan.tousimojarad@arm.com 82112149Sashkan.tousimojarad@arm.comclass HPI_UMLAL_A1(MinorFUTiming): 82212149Sashkan.tousimojarad@arm.com description = 'HPI_UMLAL_A1' 82312149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('xxxx_0000_101x_xxxx__xxxx_xxxx_1001_xxxx') 82412149Sashkan.tousimojarad@arm.com 82512149Sashkan.tousimojarad@arm.comclass HPI_UMULL_T1(MinorFUTiming): 82612149Sashkan.tousimojarad@arm.com description = 'HPI_UMULL_T1' 82712149Sashkan.tousimojarad@arm.com mask, match = t32_opcode('1111_1011_1010_xxxx__xxxx_xxxx_0000_xxxx') 82812149Sashkan.tousimojarad@arm.com 82912149Sashkan.tousimojarad@arm.comclass HPI_UMULL_A1(MinorFUTiming): 83012149Sashkan.tousimojarad@arm.com description = 'HPI_UMULL_A1' 83112149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0000_100x_xxxx__xxxx_xxxx_1001_xxxx') 83212149Sashkan.tousimojarad@arm.com 83312149Sashkan.tousimojarad@arm.comclass HPI_USAD8_USADA8_A1(MinorFUTiming): 83412149Sashkan.tousimojarad@arm.com description = 'HPI_USAD8_USADA8_A1' 83512149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0111_1000_xxxx__xxxx_xxxx_0001_xxxx') 83612149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 2, 0] 83712149Sashkan.tousimojarad@arm.com 83812149Sashkan.tousimojarad@arm.comclass HPI_USAD8_USADA8_A1_Suppress(MinorFUTiming): 83912149Sashkan.tousimojarad@arm.com description = 'HPI_USAD8_USADA8_A1_Suppress' 84012149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_0111_1000_xxxx__xxxx_xxxx_0001_xxxx') 84112149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [] 84212149Sashkan.tousimojarad@arm.com suppress = True 84312149Sashkan.tousimojarad@arm.com 84412149Sashkan.tousimojarad@arm.comclass HPI_VMOV_immediate_A1(MinorFUTiming): 84512149Sashkan.tousimojarad@arm.com description = 'HPI_VMOV_register_A1' 84612149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0010_0x10_xxxx_xxxx_0001_xxx1_xxxx') 84712149Sashkan.tousimojarad@arm.com # cpsr, z, z, z, hcptr, nsacr, cpacr, fpexc, scr 84812149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [5, 5, 5, 5, 5, 5, 5, 5, 5, 0] 84912149Sashkan.tousimojarad@arm.com 85012149Sashkan.tousimojarad@arm.comclass HPI_VMRS_A1(MinorFUTiming): 85112149Sashkan.tousimojarad@arm.com description = 'HPI_VMRS_A1' 85212149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_1110_1111_0001_xxxx_1010_xxx1_xxxx') 85312149Sashkan.tousimojarad@arm.com # cpsr,z,z,z,hcptr,nsacr,cpacr,scr,r42 85412149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [5, 5, 5, 5, 5, 5, 5, 5, 5, 0] 85512149Sashkan.tousimojarad@arm.com 85612149Sashkan.tousimojarad@arm.comclass HPI_VMOV_register_A2(MinorFUTiming): 85712149Sashkan.tousimojarad@arm.com description = 'HPI_VMOV_register_A2' 85812149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_1110_1x11_0000_xxxx_101x_01x0_xxxx') 85912149Sashkan.tousimojarad@arm.com # cpsr, z, r39, z, hcptr, nsacr, cpacr, fpexc, scr, f4, f5, f0, f1 86012149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = \ 86112149Sashkan.tousimojarad@arm.com [5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 0] 86212149Sashkan.tousimojarad@arm.com 86312149Sashkan.tousimojarad@arm.com# VADD.I16 D/VADD.F32 D/VADD.I8 D/VADD.I32 D 86412149Sashkan.tousimojarad@arm.comclass HPI_VADD2H_A32(MinorFUTiming): 86512149Sashkan.tousimojarad@arm.com description = 'Vadd2hALU' 86612149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0010_0xxx_xxxx__xxxx_1000_xxx0_xxxx') 86712149Sashkan.tousimojarad@arm.com # cpsr, z, z, z, cpacr, fpexc, l0, r0, l1, r1, l2, r2, l3, r3 (for vadd2h) 86812149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 0] 86912149Sashkan.tousimojarad@arm.com 87012149Sashkan.tousimojarad@arm.com# VAQQHN.I16 Q/VAQQHN.I32 Q/VAQQHN.I64 Q 87112149Sashkan.tousimojarad@arm.comclass HPI_VADDHN_A32(MinorFUTiming): 87212149Sashkan.tousimojarad@arm.com description = 'VaddhnALU' 87312149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0010_1xxx_xxxx__xxxx_0100_x0x0_xxxx') 87412149Sashkan.tousimojarad@arm.com # cpsr, z, z, z, cpacr, fpexc, l0, l1, l2, l3, r0, r1, r2, r3 87512149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0] 87612149Sashkan.tousimojarad@arm.com 87712149Sashkan.tousimojarad@arm.comclass HPI_VADDL_A32(MinorFUTiming): 87812149Sashkan.tousimojarad@arm.com description = 'VaddlALU' 87912149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_001x_1xxx_xxxx__xxxx_0000_x0x0_xxxx') 88012149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0] 88112149Sashkan.tousimojarad@arm.com 88212149Sashkan.tousimojarad@arm.comclass HPI_VADDW_A32(MinorFUTiming): 88312149Sashkan.tousimojarad@arm.com description = 'HPI_VADDW_A32' 88412149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_001x_1xxx_xxxx__xxxx_0001_x0x0_xxxx') 88512149Sashkan.tousimojarad@arm.com # cpsr, z, z, z, cpacr, fpexc, l0, l1, l2, l3, r0, r1 88612149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 3, 3, 0] 88712149Sashkan.tousimojarad@arm.com 88812149Sashkan.tousimojarad@arm.com# VHADD/VHSUB S8,S16,S32,U8,U16,U32 Q and D 88912149Sashkan.tousimojarad@arm.comclass HPI_VHADD_A32(MinorFUTiming): 89012149Sashkan.tousimojarad@arm.com description = 'HPI_VHADD_A32' 89112149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_001x_0xxx_xxxx__xxxx_00x0_xxx0_xxxx') 89212149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 0] 89312149Sashkan.tousimojarad@arm.com 89412149Sashkan.tousimojarad@arm.comclass HPI_VPADAL_A32(MinorFUTiming): 89512149Sashkan.tousimojarad@arm.com description = 'VpadalALU' 89612149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_1x11_xx00__xxxx_0110_xxx0_xxxx') 89712149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0] 89812149Sashkan.tousimojarad@arm.com 89912149Sashkan.tousimojarad@arm.com# VPADDH.I16 90012149Sashkan.tousimojarad@arm.comclass HPI_VPADDH_A32(MinorFUTiming): 90112149Sashkan.tousimojarad@arm.com description = 'VpaddhALU' 90212149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0010_0xxx_xxxx__xxxx_1011_xxx1_xxxx') 90312149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0] 90412149Sashkan.tousimojarad@arm.com 90512149Sashkan.tousimojarad@arm.com# VPADDH.F32 90612149Sashkan.tousimojarad@arm.comclass HPI_VPADDS_A32(MinorFUTiming): 90712149Sashkan.tousimojarad@arm.com description = 'VpaddsALU' 90812149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_0x0x_xxxx__xxxx_1101_xxx0_xxxx') 90912149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0] 91012149Sashkan.tousimojarad@arm.com 91112149Sashkan.tousimojarad@arm.com# VPADDL.S16 91212149Sashkan.tousimojarad@arm.comclass HPI_VPADDL_A32(MinorFUTiming): 91312149Sashkan.tousimojarad@arm.com description = 'VpaddlALU' 91412149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_1x11_xx00__xxxx_0010_xxx0_xxxx') 91512149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0] 91612149Sashkan.tousimojarad@arm.com 91712149Sashkan.tousimojarad@arm.com# VRADDHN.I16 91812149Sashkan.tousimojarad@arm.comclass HPI_VRADDHN_A32(MinorFUTiming): 91912149Sashkan.tousimojarad@arm.com description = 'HPI_VRADDHN_A32' 92012149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_1xxx_xxxx__xxxx_0100_x0x0_xxxx') 92112149Sashkan.tousimojarad@arm.com # cpsr, z, z, z, cpacr, fpexc, l0, l1, l2, l3, r0, r1, r2, r3 92212149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 0] 92312149Sashkan.tousimojarad@arm.com 92412149Sashkan.tousimojarad@arm.comclass HPI_VRHADD_A32(MinorFUTiming): 92512149Sashkan.tousimojarad@arm.com description = 'VrhaddALU' 92612149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_001x_0xxx_xxxx__xxxx_0001_xxx0_xxxx') 92712149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 0] 92812149Sashkan.tousimojarad@arm.com 92912149Sashkan.tousimojarad@arm.comclass HPI_VQADD_A32(MinorFUTiming): 93012149Sashkan.tousimojarad@arm.com description = 'VqaddALU' 93112149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_001x_0xxx_xxxx__xxxx_0000_xxx1_xxxx') 93212149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0] 93312149Sashkan.tousimojarad@arm.com 93412149Sashkan.tousimojarad@arm.comclass HPI_VANDQ_A32(MinorFUTiming): 93512149Sashkan.tousimojarad@arm.com description = 'VandqALU' 93612149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0010_0x00_xxxx__xxxx_0001_xxx1_xxxx') 93712149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 0] 93812149Sashkan.tousimojarad@arm.com 93912149Sashkan.tousimojarad@arm.com# VMUL (integer) 94012149Sashkan.tousimojarad@arm.comclass HPI_VMULI_A32(MinorFUTiming): 94112149Sashkan.tousimojarad@arm.com description = 'VmuliALU' 94212149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_001x_0xxx_xxxx__xxxx_1001_xxx1_xxxx') 94312149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0] 94412149Sashkan.tousimojarad@arm.com 94512149Sashkan.tousimojarad@arm.com# VBIC (reg) 94612149Sashkan.tousimojarad@arm.comclass HPI_VBIC_A32(MinorFUTiming): 94712149Sashkan.tousimojarad@arm.com description = 'VbicALU' 94812149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0010_0x01_xxxx__xxxx_0001_xxx1_xxxx') 94912149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 0] 95012149Sashkan.tousimojarad@arm.com 95112149Sashkan.tousimojarad@arm.com# VBIF VBIT VBSL 95212149Sashkan.tousimojarad@arm.comclass HPI_VBIF_ETC_A32(MinorFUTiming): 95312149Sashkan.tousimojarad@arm.com description = 'VbifALU' 95412149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_0xxx_xxxx__xxxx_0001_xxx1_xxxx') 95512149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = \ 95612149Sashkan.tousimojarad@arm.com [0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0] 95712149Sashkan.tousimojarad@arm.com 95812149Sashkan.tousimojarad@arm.comclass HPI_VACGE_A32(MinorFUTiming): 95912149Sashkan.tousimojarad@arm.com description = 'VacgeALU' 96012149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_0xxx_xxxx__xxxx_1110_xxx1_xxxx') 96112149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0] 96212149Sashkan.tousimojarad@arm.com 96312149Sashkan.tousimojarad@arm.com# VCEQ.F32 96412149Sashkan.tousimojarad@arm.comclass HPI_VCEQ_A32(MinorFUTiming): 96512149Sashkan.tousimojarad@arm.com description = 'VceqALU' 96612149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0010_0x0x_xxxx__xxxx_1110_xxx0_xxxx') 96712149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0] 96812149Sashkan.tousimojarad@arm.com 96912149Sashkan.tousimojarad@arm.com# VCEQ.[IS]... register 97012149Sashkan.tousimojarad@arm.comclass HPI_VCEQI_A32(MinorFUTiming): 97112149Sashkan.tousimojarad@arm.com description = 'VceqiALU' 97212149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_0xxx_xxxx__xxxx_1000_xxx1_xxxx') 97312149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0] 97412149Sashkan.tousimojarad@arm.com 97512149Sashkan.tousimojarad@arm.com# VCEQ.[IS]... immediate 97612149Sashkan.tousimojarad@arm.comclass HPI_VCEQII_A32(MinorFUTiming): 97712149Sashkan.tousimojarad@arm.com description = 'HPI_VCEQII_A32' 97812149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_1x11_xx01__xxxx_0x01_0xx0_xxxx') 97912149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0] 98012149Sashkan.tousimojarad@arm.com 98112149Sashkan.tousimojarad@arm.comclass HPI_VTST_A32(MinorFUTiming): 98212149Sashkan.tousimojarad@arm.com description = 'HPI_VTST_A32' 98312149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0010_0xxx_xxxx__xxxx_1000_xxx1_xxxx') 98412149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0] 98512149Sashkan.tousimojarad@arm.com 98612149Sashkan.tousimojarad@arm.comclass HPI_VCLZ_A32(MinorFUTiming): 98712149Sashkan.tousimojarad@arm.com description = 'HPI_VCLZ_A32' 98812149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_1x11_xx00__xxxx_0100_1xx0_xxxx') 98912149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0] 99012149Sashkan.tousimojarad@arm.com 99112149Sashkan.tousimojarad@arm.comclass HPI_VCNT_A32(MinorFUTiming): 99212149Sashkan.tousimojarad@arm.com description = 'HPI_VCNT_A32' 99312149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_1x11_xx00__xxxx_0101_0xx0_xxxx') 99412149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0] 99512149Sashkan.tousimojarad@arm.com 99612149Sashkan.tousimojarad@arm.comclass HPI_VEXT_A32(MinorFUTiming): 99712149Sashkan.tousimojarad@arm.com description = 'HPI_VCNT_A32' 99812149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0010_1x11_xxxx__xxxx_xxxx_xxx0_xxxx') 99912149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0] 100012149Sashkan.tousimojarad@arm.com 100112149Sashkan.tousimojarad@arm.com# VMAX VMIN integer 100212149Sashkan.tousimojarad@arm.comclass HPI_VMAXI_A32(MinorFUTiming): 100312149Sashkan.tousimojarad@arm.com description = 'HPI_VMAXI_A32' 100412149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_001x_0xxx_xxxx__xxxx_0110_xxxx_xxxx') 100512149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0] 100612149Sashkan.tousimojarad@arm.com 100712149Sashkan.tousimojarad@arm.com# VMAX VMIN float 100812149Sashkan.tousimojarad@arm.comclass HPI_VMAXS_A32(MinorFUTiming): 100912149Sashkan.tousimojarad@arm.com description = 'HPI_VMAXS_A32' 101012149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0010_0xxx_xxxx__xxxx_1111_xxx0_xxxx') 101112149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0] 101212149Sashkan.tousimojarad@arm.com 101312149Sashkan.tousimojarad@arm.com# VNEG integer 101412149Sashkan.tousimojarad@arm.comclass HPI_VNEGI_A32(MinorFUTiming): 101512149Sashkan.tousimojarad@arm.com description = 'HPI_VNEGI_A32' 101612149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_1x11_xx01__xxxx_0x11_1xx0_xxxx') 101712149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0] 101812149Sashkan.tousimojarad@arm.com 101912149Sashkan.tousimojarad@arm.com# VNEG float 102012149Sashkan.tousimojarad@arm.comclass HPI_VNEGF_A32(MinorFUTiming): 102112149Sashkan.tousimojarad@arm.com description = 'HPI_VNEGF_A32' 102212149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_1110_1x11_0001__xxxx_101x_01x0_xxxx') 102312149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0] 102412149Sashkan.tousimojarad@arm.com 102512149Sashkan.tousimojarad@arm.com# VREV16 VREV32 VREV64 102612149Sashkan.tousimojarad@arm.comclass HPI_VREVN_A32(MinorFUTiming): 102712149Sashkan.tousimojarad@arm.com description = 'HPI_VREVN_A32' 102812149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_1x11_xx00__xxxx_000x_xxx0_xxxx') 102912149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0] 103012149Sashkan.tousimojarad@arm.com 103112149Sashkan.tousimojarad@arm.comclass HPI_VQNEG_A32(MinorFUTiming): 103212149Sashkan.tousimojarad@arm.com description = 'HPI_VQNEG_A32' 103312149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_1x11_xx00__xxxx_0111_1xx0_xxxx') 103412149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0] 103512149Sashkan.tousimojarad@arm.com 103612149Sashkan.tousimojarad@arm.comclass HPI_VSWP_A32(MinorFUTiming): 103712149Sashkan.tousimojarad@arm.com description = 'HPI_VSWP_A32' 103812149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_1x11_xx10__xxxx_0000_0xx0_xxxx') 103912149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 0] 104012149Sashkan.tousimojarad@arm.com 104112149Sashkan.tousimojarad@arm.comclass HPI_VTRN_A32(MinorFUTiming): 104212149Sashkan.tousimojarad@arm.com description = 'HPI_VTRN_A32' 104312149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_1x11_xx10__xxxx_0000_1xx0_xxxx') 104412149Sashkan.tousimojarad@arm.com # cpsr, z, z, z, cpact, fpexc, o0, d0, o1, d1, o2, d2, o3, d3 104512149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0] 104612149Sashkan.tousimojarad@arm.com 104712149Sashkan.tousimojarad@arm.com# VQMOVN VQMOVUN 104812149Sashkan.tousimojarad@arm.comclass HPI_VQMOVN_A32(MinorFUTiming): 104912149Sashkan.tousimojarad@arm.com description = 'HPI_VQMOVN_A32' 105012149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_1x11_xx10__xxxx_0010_xxx0_xxxx') 105112149Sashkan.tousimojarad@arm.com # cpsr, z, z, z, cpact, fpexc, o[0], o[1], o[2], o[3], fpscr 105212149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0] 105312149Sashkan.tousimojarad@arm.com 105412149Sashkan.tousimojarad@arm.com# VUZP double word 105512149Sashkan.tousimojarad@arm.comclass HPI_VUZP_A32(MinorFUTiming): 105612149Sashkan.tousimojarad@arm.com description = 'HPI_VUZP_A32' 105712149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_1x11_xx10__xxxx_0001_00x0_xxxx') 105812149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0] 105912149Sashkan.tousimojarad@arm.com 106012149Sashkan.tousimojarad@arm.com# VDIV.F32 106112149Sashkan.tousimojarad@arm.comclass HPI_VDIV32_A32(MinorFUTiming): 106212149Sashkan.tousimojarad@arm.com description = 'HPI_VDIV32_A32' 106312149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_1110_1x00_xxxx__xxxx_1010_x0x0_xxxx') 106412149Sashkan.tousimojarad@arm.com # cpsr, z, z, z, cpact, fpexc, fpscr_exc, l, r 106512149Sashkan.tousimojarad@arm.com extraCommitLat = 9 106612149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 20, 4, 4, 0] 106712149Sashkan.tousimojarad@arm.com 106812149Sashkan.tousimojarad@arm.com# VDIV.F64 106912149Sashkan.tousimojarad@arm.comclass HPI_VDIV64_A32(MinorFUTiming): 107012149Sashkan.tousimojarad@arm.com description = 'HPI_VDIV64_A32' 107112149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_1110_1x00_xxxx__xxxx_1011_x0x0_xxxx') 107212149Sashkan.tousimojarad@arm.com # cpsr, z, z, z, cpact, fpexc, fpscr_exc, l, r 107312149Sashkan.tousimojarad@arm.com extraCommitLat = 18 107412149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 20, 4, 4, 0] 107512149Sashkan.tousimojarad@arm.com 107612149Sashkan.tousimojarad@arm.comclass HPI_VZIP_A32(MinorFUTiming): 107712149Sashkan.tousimojarad@arm.com description = 'HPI_VZIP_A32' 107812149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_1x11_xx10__xxxx_0001_1xx0_xxxx') 107912149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 0] 108012149Sashkan.tousimojarad@arm.com 108112149Sashkan.tousimojarad@arm.com# VPMAX integer 108212149Sashkan.tousimojarad@arm.comclass HPI_VPMAX_A32(MinorFUTiming): 108312149Sashkan.tousimojarad@arm.com description = 'HPI_VPMAX_A32' 108412149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_001x_0xxx_xxxx__xxxx_1010_xxxx_xxxx') 108512149Sashkan.tousimojarad@arm.com # cpsr, z, z, z, cpact, fpexc, l0, r0, l1, r1, fpscr 108612149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 0] 108712149Sashkan.tousimojarad@arm.com 108812149Sashkan.tousimojarad@arm.com# VPMAX float 108912149Sashkan.tousimojarad@arm.comclass HPI_VPMAXF_A32(MinorFUTiming): 109012149Sashkan.tousimojarad@arm.com description = 'HPI_VPMAXF_A32' 109112149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_0xxx_xxxx__xxxx_1111_xxx0_xxxx') 109212149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0] 109312149Sashkan.tousimojarad@arm.com 109412149Sashkan.tousimojarad@arm.comclass HPI_VMOVN_A32(MinorFUTiming): 109512149Sashkan.tousimojarad@arm.com description = 'HPI_VMOVN_A32' 109612149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_0011_1x11_xx10__xxxx_0010_00x0_xxxx') 109712149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 0] 109812149Sashkan.tousimojarad@arm.com 109912149Sashkan.tousimojarad@arm.comclass HPI_VMOVL_A32(MinorFUTiming): 110012149Sashkan.tousimojarad@arm.com description = 'HPI_VMOVL_A32' 110112149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('1111_001x_1xxx_x000__xxxx_1010_00x1_xxxx') 110212149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 0] 110312149Sashkan.tousimojarad@arm.com 110412149Sashkan.tousimojarad@arm.com# VSQRT.F64 110512149Sashkan.tousimojarad@arm.comclass HPI_VSQRT64_A32(MinorFUTiming): 110612149Sashkan.tousimojarad@arm.com description = 'HPI_VSQRT64_A32' 110712149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_1110_1x11_0001__xxxx_1011_11x0_xxxx') 110812149Sashkan.tousimojarad@arm.com extraCommitLat = 18 110912149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [] 111012149Sashkan.tousimojarad@arm.com 111112149Sashkan.tousimojarad@arm.com# VSQRT.F32 111212149Sashkan.tousimojarad@arm.comclass HPI_VSQRT32_A32(MinorFUTiming): 111312149Sashkan.tousimojarad@arm.com description = 'HPI_VSQRT32_A32' 111412149Sashkan.tousimojarad@arm.com mask, match = a32_opcode('xxxx_1110_1x11_0001__xxxx_1010_11x0_xxxx') 111512149Sashkan.tousimojarad@arm.com extraCommitLat = 9 111612149Sashkan.tousimojarad@arm.com srcRegsRelativeLats = [] 111712149Sashkan.tousimojarad@arm.com 111812149Sashkan.tousimojarad@arm.comclass HPI_FloatSimdFU(MinorFU): 111912149Sashkan.tousimojarad@arm.com opClasses = minorMakeOpClassSet([ 112012149Sashkan.tousimojarad@arm.com 'FloatAdd', 'FloatCmp', 'FloatCvt', 'FloatMult', 'FloatDiv', 112112149Sashkan.tousimojarad@arm.com 'FloatSqrt', 'FloatMisc', 'FloatMultAcc', 112212149Sashkan.tousimojarad@arm.com 'SimdAdd', 'SimdAddAcc', 'SimdAlu', 'SimdCmp', 'SimdCvt', 112312149Sashkan.tousimojarad@arm.com 'SimdMisc', 'SimdMult', 'SimdMultAcc', 'SimdShift', 'SimdShiftAcc', 112412149Sashkan.tousimojarad@arm.com 'SimdSqrt', 'SimdFloatAdd', 'SimdFloatAlu', 'SimdFloatCmp', 112512149Sashkan.tousimojarad@arm.com 'SimdFloatCvt', 'SimdFloatDiv', 'SimdFloatMisc', 'SimdFloatMult', 112612149Sashkan.tousimojarad@arm.com 'SimdFloatMultAcc', 'SimdFloatSqrt']) 112712149Sashkan.tousimojarad@arm.com 112812149Sashkan.tousimojarad@arm.com timings = [ 112912149Sashkan.tousimojarad@arm.com # VUZP and VZIP must be before VADDW/L 113012149Sashkan.tousimojarad@arm.com HPI_VUZP_A32(), HPI_VZIP_A32(), 113112149Sashkan.tousimojarad@arm.com HPI_VADD2H_A32(), HPI_VADDHN_A32(), 113212149Sashkan.tousimojarad@arm.com HPI_VADDL_A32(), HPI_VADDW_A32(), 113312149Sashkan.tousimojarad@arm.com HPI_VHADD_A32(), HPI_VPADAL_A32(), 113412149Sashkan.tousimojarad@arm.com HPI_VPADDH_A32(), HPI_VPADDS_A32(), 113512149Sashkan.tousimojarad@arm.com HPI_VPADDL_A32(), HPI_VRADDHN_A32(), 113612149Sashkan.tousimojarad@arm.com HPI_VRHADD_A32(), HPI_VQADD_A32(), 113712149Sashkan.tousimojarad@arm.com HPI_VANDQ_A32(), HPI_VBIC_A32(), 113812149Sashkan.tousimojarad@arm.com HPI_VBIF_ETC_A32(), HPI_VACGE_A32(), 113912149Sashkan.tousimojarad@arm.com HPI_VCEQ_A32(), HPI_VCEQI_A32(), 114012149Sashkan.tousimojarad@arm.com HPI_VCEQII_A32(), HPI_VTST_A32(), 114112149Sashkan.tousimojarad@arm.com HPI_VCLZ_A32(), HPI_VCNT_A32(), 114212149Sashkan.tousimojarad@arm.com HPI_VEXT_A32(), HPI_VMAXI_A32(), 114312149Sashkan.tousimojarad@arm.com HPI_VMAXS_A32(), HPI_VNEGI_A32(), 114412149Sashkan.tousimojarad@arm.com HPI_VNEGF_A32(), HPI_VREVN_A32(), 114512149Sashkan.tousimojarad@arm.com HPI_VQNEG_A32(), HPI_VSWP_A32(), 114612149Sashkan.tousimojarad@arm.com HPI_VTRN_A32(), HPI_VPMAX_A32(), 114712149Sashkan.tousimojarad@arm.com HPI_VPMAXF_A32(), HPI_VMOVN_A32(), 114812149Sashkan.tousimojarad@arm.com HPI_VMRS_A1(), 114912149Sashkan.tousimojarad@arm.com HPI_VMOV_immediate_A1(), 115012149Sashkan.tousimojarad@arm.com HPI_VMOV_register_A2(), 115112149Sashkan.tousimojarad@arm.com HPI_VQMOVN_A32(), HPI_VMOVL_A32(), 115212149Sashkan.tousimojarad@arm.com HPI_VDIV32_A32(), HPI_VDIV64_A32(), 115312149Sashkan.tousimojarad@arm.com HPI_VSQRT32_A32(), HPI_VSQRT64_A32(), 115412149Sashkan.tousimojarad@arm.com HPI_VMULI_A32(), 115512149Sashkan.tousimojarad@arm.com # Add before here 115612149Sashkan.tousimojarad@arm.com HPI_FMADD_A64(), 115712149Sashkan.tousimojarad@arm.com HPI_FMSUB_D_A64(), 115812149Sashkan.tousimojarad@arm.com HPI_FMOV_A64(), 115912149Sashkan.tousimojarad@arm.com HPI_ADD_SUB_vector_scalar_A64(), 116012149Sashkan.tousimojarad@arm.com HPI_ADD_SUB_vector_vector_A64(), 116112149Sashkan.tousimojarad@arm.com HPI_FDIV_scalar_32_A64(), HPI_FDIV_scalar_64_A64(), 116212149Sashkan.tousimojarad@arm.com HPI_DefaultA64Vfp(), 116312149Sashkan.tousimojarad@arm.com HPI_DefaultVfp()] 116412149Sashkan.tousimojarad@arm.com 116512149Sashkan.tousimojarad@arm.com opLat = 6 116612149Sashkan.tousimojarad@arm.com 116712149Sashkan.tousimojarad@arm.comclass HPI_IntFU(MinorFU): 116812149Sashkan.tousimojarad@arm.com opClasses = minorMakeOpClassSet(['IntAlu']) 116912149Sashkan.tousimojarad@arm.com # IMPORTANT! Keep the order below, add new entries *at the head* 117012149Sashkan.tousimojarad@arm.com timings = [ 117112149Sashkan.tousimojarad@arm.com HPI_SSAT_USAT_no_shift_A1(), 117212149Sashkan.tousimojarad@arm.com HPI_SSAT_USAT_shift_A1(), 117312149Sashkan.tousimojarad@arm.com HPI_SSAT16_USAT16_A1(), 117412149Sashkan.tousimojarad@arm.com HPI_QADD_QSUB_A1(), 117512149Sashkan.tousimojarad@arm.com HPI_QADD_QSUB_T1(), 117612149Sashkan.tousimojarad@arm.com HPI_QADD_ETC_A1(), 117712149Sashkan.tousimojarad@arm.com HPI_QASX_QSAX_UQASX_UQSAX_T1(), 117812149Sashkan.tousimojarad@arm.com HPI_QADD_ETC_T1(), 117912149Sashkan.tousimojarad@arm.com HPI_USUB_ETC_A1(), 118012149Sashkan.tousimojarad@arm.com HPI_ADD_ETC_A1(), 118112149Sashkan.tousimojarad@arm.com HPI_ADD_ETC_T1(), 118212149Sashkan.tousimojarad@arm.com HPI_QDADD_QDSUB_A1(), 118312149Sashkan.tousimojarad@arm.com HPI_QDADD_QDSUB_T1(), 118412149Sashkan.tousimojarad@arm.com HPI_SASX_SHASX_UASX_UHASX_A1(), 118512149Sashkan.tousimojarad@arm.com HPI_SHSAX_SSAX_UHSAX_USAX_A1(), 118612149Sashkan.tousimojarad@arm.com HPI_SXTB_SXTB16_SXTH_UXTB_UXTB16_UXTH_A1(), 118712149Sashkan.tousimojarad@arm.com 118812149Sashkan.tousimojarad@arm.com # Must be after HPI_SXTB_SXTB16_SXTH_UXTB_UXTB16_UXTH_A1 118912149Sashkan.tousimojarad@arm.com HPI_SXTAB_SXTAB16_SXTAH_UXTAB_UXTAB16_UXTAH_A1(), 119012149Sashkan.tousimojarad@arm.com 119112149Sashkan.tousimojarad@arm.com HPI_SXTAB_T1(), 119212149Sashkan.tousimojarad@arm.com HPI_SXTAB16_T1(), 119312149Sashkan.tousimojarad@arm.com HPI_SXTAH_T1(), 119412149Sashkan.tousimojarad@arm.com HPI_SXTB_T2(), 119512149Sashkan.tousimojarad@arm.com HPI_SXTB16_T1(), 119612149Sashkan.tousimojarad@arm.com HPI_SXTH_T2(), 119712149Sashkan.tousimojarad@arm.com 119812149Sashkan.tousimojarad@arm.com HPI_PKH_A1(), 119912149Sashkan.tousimojarad@arm.com HPI_PKH_T1(), 120012149Sashkan.tousimojarad@arm.com HPI_SBFX_UBFX_A1(), 120112149Sashkan.tousimojarad@arm.com HPI_SEL_A1(), 120212149Sashkan.tousimojarad@arm.com HPI_RBIT_A1(), 120312149Sashkan.tousimojarad@arm.com HPI_REV_REV16_A1(), 120412149Sashkan.tousimojarad@arm.com HPI_REVSH_A1(), 120512149Sashkan.tousimojarad@arm.com HPI_USAD8_USADA8_A1(), 120612149Sashkan.tousimojarad@arm.com HPI_BFI_A1(), 120712149Sashkan.tousimojarad@arm.com HPI_BFI_T1(), 120812149Sashkan.tousimojarad@arm.com 120912149Sashkan.tousimojarad@arm.com HPI_CMN_register_A1(), 121012149Sashkan.tousimojarad@arm.com HPI_CMN_immediate_A1(), 121112149Sashkan.tousimojarad@arm.com HPI_CMP_register_A1(), 121212149Sashkan.tousimojarad@arm.com HPI_CMP_immediate_A1(), 121312149Sashkan.tousimojarad@arm.com 121412149Sashkan.tousimojarad@arm.com HPI_DataProcessingNoShift(), 121512149Sashkan.tousimojarad@arm.com HPI_DataProcessingMovShiftr(), 121612149Sashkan.tousimojarad@arm.com HPI_DataProcessingMayShift(), 121712149Sashkan.tousimojarad@arm.com 121812149Sashkan.tousimojarad@arm.com HPI_Cxxx_A64(), 121912149Sashkan.tousimojarad@arm.com 122012149Sashkan.tousimojarad@arm.com HPI_DefaultA64Int(), 122112149Sashkan.tousimojarad@arm.com HPI_DefaultInt()] 122212149Sashkan.tousimojarad@arm.com opLat = 3 122312149Sashkan.tousimojarad@arm.com 122412149Sashkan.tousimojarad@arm.comclass HPI_Int2FU(MinorFU): 122512149Sashkan.tousimojarad@arm.com opClasses = minorMakeOpClassSet(['IntAlu']) 122612149Sashkan.tousimojarad@arm.com # IMPORTANT! Keep the order below, add new entries *at the head* 122712149Sashkan.tousimojarad@arm.com timings = [ 122812149Sashkan.tousimojarad@arm.com HPI_SSAT_USAT_no_shift_A1(), 122912149Sashkan.tousimojarad@arm.com HPI_SSAT_USAT_shift_A1(), 123012149Sashkan.tousimojarad@arm.com HPI_SSAT16_USAT16_A1(), 123112149Sashkan.tousimojarad@arm.com HPI_QADD_QSUB_A1(), 123212149Sashkan.tousimojarad@arm.com HPI_QADD_QSUB_T1(), 123312149Sashkan.tousimojarad@arm.com HPI_QADD_ETC_A1(), 123412149Sashkan.tousimojarad@arm.com HPI_QASX_QSAX_UQASX_UQSAX_T1(), 123512149Sashkan.tousimojarad@arm.com HPI_QADD_ETC_T1(), 123612149Sashkan.tousimojarad@arm.com HPI_USUB_ETC_A1(), 123712149Sashkan.tousimojarad@arm.com HPI_ADD_ETC_A1(), 123812149Sashkan.tousimojarad@arm.com HPI_ADD_ETC_T1(), 123912149Sashkan.tousimojarad@arm.com HPI_QDADD_QDSUB_A1(), 124012149Sashkan.tousimojarad@arm.com HPI_QDADD_QDSUB_T1(), 124112149Sashkan.tousimojarad@arm.com HPI_SASX_SHASX_UASX_UHASX_A1(), 124212149Sashkan.tousimojarad@arm.com HPI_SHSAX_SSAX_UHSAX_USAX_A1(), 124312149Sashkan.tousimojarad@arm.com HPI_SXTB_SXTB16_SXTH_UXTB_UXTB16_UXTH_A1(), 124412149Sashkan.tousimojarad@arm.com 124512149Sashkan.tousimojarad@arm.com # Must be after HPI_SXTB_SXTB16_SXTH_UXTB_UXTB16_UXTH_A1 124612149Sashkan.tousimojarad@arm.com HPI_SXTAB_SXTAB16_SXTAH_UXTAB_UXTAB16_UXTAH_A1(), 124712149Sashkan.tousimojarad@arm.com 124812149Sashkan.tousimojarad@arm.com HPI_SXTAB_T1(), 124912149Sashkan.tousimojarad@arm.com HPI_SXTAB16_T1(), 125012149Sashkan.tousimojarad@arm.com HPI_SXTAH_T1(), 125112149Sashkan.tousimojarad@arm.com HPI_SXTB_T2(), 125212149Sashkan.tousimojarad@arm.com HPI_SXTB16_T1(), 125312149Sashkan.tousimojarad@arm.com HPI_SXTH_T2(), 125412149Sashkan.tousimojarad@arm.com 125512149Sashkan.tousimojarad@arm.com HPI_PKH_A1(), 125612149Sashkan.tousimojarad@arm.com HPI_PKH_T1(), 125712149Sashkan.tousimojarad@arm.com HPI_SBFX_UBFX_A1(), 125812149Sashkan.tousimojarad@arm.com HPI_SEL_A1_Suppress(), 125912149Sashkan.tousimojarad@arm.com HPI_RBIT_A1(), 126012149Sashkan.tousimojarad@arm.com HPI_REV_REV16_A1(), 126112149Sashkan.tousimojarad@arm.com HPI_REVSH_A1(), 126212149Sashkan.tousimojarad@arm.com HPI_USAD8_USADA8_A1_Suppress(), 126312149Sashkan.tousimojarad@arm.com HPI_BFI_A1(), 126412149Sashkan.tousimojarad@arm.com HPI_BFI_T1(), 126512149Sashkan.tousimojarad@arm.com 126612149Sashkan.tousimojarad@arm.com HPI_CMN_register_A1(), # Need to check for shift 126712149Sashkan.tousimojarad@arm.com HPI_CMN_immediate_A1(), 126812149Sashkan.tousimojarad@arm.com HPI_CMP_register_A1(), # Need to check for shift 126912149Sashkan.tousimojarad@arm.com HPI_CMP_immediate_A1(), 127012149Sashkan.tousimojarad@arm.com 127112149Sashkan.tousimojarad@arm.com HPI_DataProcessingNoShift(), 127212149Sashkan.tousimojarad@arm.com HPI_DataProcessingAllowShifti(), 127312149Sashkan.tousimojarad@arm.com # HPI_DataProcessingAllowMovShiftr(), 127412149Sashkan.tousimojarad@arm.com 127512149Sashkan.tousimojarad@arm.com # Data processing ops that match SuppressShift but are *not* 127612149Sashkan.tousimojarad@arm.com # to be suppressed here 127712149Sashkan.tousimojarad@arm.com HPI_CLZ_A1(), 127812149Sashkan.tousimojarad@arm.com HPI_CLZ_T1(), 127912149Sashkan.tousimojarad@arm.com HPI_DataProcessingSuppressShift(), 128012149Sashkan.tousimojarad@arm.com # Can you dual issue a branch? 128112149Sashkan.tousimojarad@arm.com # HPI_DataProcessingSuppressBranch(), 128212149Sashkan.tousimojarad@arm.com HPI_Cxxx_A64(), 128312149Sashkan.tousimojarad@arm.com 128412149Sashkan.tousimojarad@arm.com HPI_DefaultA64Int(), 128512149Sashkan.tousimojarad@arm.com HPI_DefaultInt()] 128612149Sashkan.tousimojarad@arm.com opLat = 3 128712149Sashkan.tousimojarad@arm.com 128812149Sashkan.tousimojarad@arm.comclass HPI_IntMulFU(MinorFU): 128912149Sashkan.tousimojarad@arm.com opClasses = minorMakeOpClassSet(['IntMult']) 129012149Sashkan.tousimojarad@arm.com timings = [ 129112149Sashkan.tousimojarad@arm.com HPI_MLA_A1(), HPI_MLA_T1(), 129212149Sashkan.tousimojarad@arm.com HPI_MLS_A1(), HPI_MLS_T1(), 129312149Sashkan.tousimojarad@arm.com HPI_SMLABB_A1(), HPI_SMLABB_T1(), 129412149Sashkan.tousimojarad@arm.com HPI_SMLAWB_A1(), HPI_SMLAWB_T1(), 129512149Sashkan.tousimojarad@arm.com HPI_SMLAD_A1(), HPI_SMLAD_T1(), 129612149Sashkan.tousimojarad@arm.com HPI_SMMUL_A1(), HPI_SMMUL_T1(), 129712149Sashkan.tousimojarad@arm.com # SMMUL_A1 must be before SMMLA_A1 129812149Sashkan.tousimojarad@arm.com HPI_SMMLA_A1(), HPI_SMMLA_T1(), 129912149Sashkan.tousimojarad@arm.com HPI_SMMLS_A1(), HPI_SMMLS_T1(), 130012149Sashkan.tousimojarad@arm.com HPI_UMAAL_A1(), HPI_UMAAL_T1(), 130112149Sashkan.tousimojarad@arm.com 130212149Sashkan.tousimojarad@arm.com HPI_MADD_A64(), 130312149Sashkan.tousimojarad@arm.com HPI_DefaultA64Mul(), 130412149Sashkan.tousimojarad@arm.com HPI_DefaultMul()] 130512149Sashkan.tousimojarad@arm.com opLat = 3 130612149Sashkan.tousimojarad@arm.com cantForwardFromFUIndices = [0, 1, 5] # Int1, Int2, Mem 130712149Sashkan.tousimojarad@arm.com 130812149Sashkan.tousimojarad@arm.comclass HPI_IntDivFU(MinorFU): 130912149Sashkan.tousimojarad@arm.com opClasses = minorMakeOpClassSet(['IntDiv']) 131012149Sashkan.tousimojarad@arm.com timings = [HPI_SDIV_A1(), HPI_UDIV_A1(), 131112149Sashkan.tousimojarad@arm.com HPI_SDIV_A64()] 131212149Sashkan.tousimojarad@arm.com issueLat = 3 131312149Sashkan.tousimojarad@arm.com opLat = 3 131412149Sashkan.tousimojarad@arm.com 131512149Sashkan.tousimojarad@arm.comclass HPI_MemFU(MinorFU): 131612149Sashkan.tousimojarad@arm.com opClasses = minorMakeOpClassSet(['MemRead', 'MemWrite', 'FloatMemRead', 131712149Sashkan.tousimojarad@arm.com 'FloatMemWrite']) 131812149Sashkan.tousimojarad@arm.com timings = [HPI_DefaultMem(), HPI_DefaultMem64()] 131912149Sashkan.tousimojarad@arm.com opLat = 1 132012149Sashkan.tousimojarad@arm.com cantForwardFromFUIndices = [5] # Mem (this FU) 132112149Sashkan.tousimojarad@arm.com 132212149Sashkan.tousimojarad@arm.comclass HPI_MiscFU(MinorFU): 132312149Sashkan.tousimojarad@arm.com opClasses = minorMakeOpClassSet(['IprAccess', 'InstPrefetch']) 132412149Sashkan.tousimojarad@arm.com opLat = 1 132512149Sashkan.tousimojarad@arm.com 132612149Sashkan.tousimojarad@arm.comclass HPI_FUPool(MinorFUPool): 132712149Sashkan.tousimojarad@arm.com funcUnits = [HPI_IntFU(), # 0 132812149Sashkan.tousimojarad@arm.com HPI_Int2FU(), # 1 132912149Sashkan.tousimojarad@arm.com HPI_IntMulFU(), # 2 133012149Sashkan.tousimojarad@arm.com HPI_IntDivFU(), # 3 133112149Sashkan.tousimojarad@arm.com HPI_FloatSimdFU(), # 4 133212149Sashkan.tousimojarad@arm.com HPI_MemFU(), # 5 133312149Sashkan.tousimojarad@arm.com HPI_MiscFU() # 6 133412149Sashkan.tousimojarad@arm.com ] 133512149Sashkan.tousimojarad@arm.com 133612149Sashkan.tousimojarad@arm.comclass HPI_DTB(ArmTLB): 133712149Sashkan.tousimojarad@arm.com size = 256 133812149Sashkan.tousimojarad@arm.com 133912149Sashkan.tousimojarad@arm.comclass HPI_ITB(ArmTLB): 134012149Sashkan.tousimojarad@arm.com size = 256 134112149Sashkan.tousimojarad@arm.com 134212149Sashkan.tousimojarad@arm.comclass HPI_WalkCache(Cache): 134312149Sashkan.tousimojarad@arm.com data_latency = 4 134412149Sashkan.tousimojarad@arm.com tag_latency = 4 134512149Sashkan.tousimojarad@arm.com response_latency = 4 134612149Sashkan.tousimojarad@arm.com mshrs = 6 134712149Sashkan.tousimojarad@arm.com tgts_per_mshr = 8 134812149Sashkan.tousimojarad@arm.com size = '1kB' 134912149Sashkan.tousimojarad@arm.com assoc = 8 135012149Sashkan.tousimojarad@arm.com write_buffers = 16 135112149Sashkan.tousimojarad@arm.com 135212149Sashkan.tousimojarad@arm.comclass HPI_BP(TournamentBP): 135312149Sashkan.tousimojarad@arm.com localPredictorSize = 64 135412149Sashkan.tousimojarad@arm.com localCtrBits = 2 135512149Sashkan.tousimojarad@arm.com localHistoryTableSize = 64 135612149Sashkan.tousimojarad@arm.com globalPredictorSize = 1024 135712149Sashkan.tousimojarad@arm.com globalCtrBits = 2 135812149Sashkan.tousimojarad@arm.com choicePredictorSize = 1024 135912149Sashkan.tousimojarad@arm.com choiceCtrBits = 2 136012149Sashkan.tousimojarad@arm.com BTBEntries = 128 136112149Sashkan.tousimojarad@arm.com BTBTagSize = 18 136212149Sashkan.tousimojarad@arm.com RASSize = 8 136312149Sashkan.tousimojarad@arm.com instShiftAmt = 2 136412149Sashkan.tousimojarad@arm.com 136512149Sashkan.tousimojarad@arm.comclass HPI_ICache(Cache): 136612149Sashkan.tousimojarad@arm.com data_latency = 1 136712149Sashkan.tousimojarad@arm.com tag_latency = 1 136812149Sashkan.tousimojarad@arm.com response_latency = 1 136912149Sashkan.tousimojarad@arm.com mshrs = 2 137012149Sashkan.tousimojarad@arm.com tgts_per_mshr = 8 137112149Sashkan.tousimojarad@arm.com size = '32kB' 137212149Sashkan.tousimojarad@arm.com assoc = 2 137312149Sashkan.tousimojarad@arm.com # No prefetcher, this is handled by the core 137412149Sashkan.tousimojarad@arm.com 137512149Sashkan.tousimojarad@arm.comclass HPI_DCache(Cache): 137612149Sashkan.tousimojarad@arm.com data_latency = 1 137712149Sashkan.tousimojarad@arm.com tag_latency = 1 137812149Sashkan.tousimojarad@arm.com response_latency = 1 137912149Sashkan.tousimojarad@arm.com mshrs = 4 138012149Sashkan.tousimojarad@arm.com tgts_per_mshr = 8 138112149Sashkan.tousimojarad@arm.com size = '32kB' 138212149Sashkan.tousimojarad@arm.com assoc = 4 138312149Sashkan.tousimojarad@arm.com write_buffers = 4 138412149Sashkan.tousimojarad@arm.com prefetcher = StridePrefetcher( 138512149Sashkan.tousimojarad@arm.com queue_size=4, 138612149Sashkan.tousimojarad@arm.com degree=4) 138712149Sashkan.tousimojarad@arm.com 138812149Sashkan.tousimojarad@arm.comclass HPI_L2(Cache): 138912149Sashkan.tousimojarad@arm.com data_latency = 13 139012149Sashkan.tousimojarad@arm.com tag_latency = 13 139112149Sashkan.tousimojarad@arm.com response_latency = 5 139212149Sashkan.tousimojarad@arm.com mshrs = 4 139312149Sashkan.tousimojarad@arm.com tgts_per_mshr = 8 139412149Sashkan.tousimojarad@arm.com size = '1024kB' 139512149Sashkan.tousimojarad@arm.com assoc = 16 139612149Sashkan.tousimojarad@arm.com write_buffers = 16 139712149Sashkan.tousimojarad@arm.com # prefetcher FIXME 139812149Sashkan.tousimojarad@arm.com 139912149Sashkan.tousimojarad@arm.comclass HPI(MinorCPU): 140012149Sashkan.tousimojarad@arm.com # Inherit the doc string from the module to avoid repeating it 140112149Sashkan.tousimojarad@arm.com # here. 140212149Sashkan.tousimojarad@arm.com __doc__ = __doc__ 140312149Sashkan.tousimojarad@arm.com 140412149Sashkan.tousimojarad@arm.com fetch1LineSnapWidth = 0 140512149Sashkan.tousimojarad@arm.com fetch1LineWidth = 0 140612149Sashkan.tousimojarad@arm.com fetch1FetchLimit = 1 140712149Sashkan.tousimojarad@arm.com fetch1ToFetch2ForwardDelay = 1 140812149Sashkan.tousimojarad@arm.com fetch1ToFetch2BackwardDelay = 1 140912149Sashkan.tousimojarad@arm.com 141012149Sashkan.tousimojarad@arm.com fetch2InputBufferSize = 2 141112149Sashkan.tousimojarad@arm.com fetch2ToDecodeForwardDelay = 1 141212149Sashkan.tousimojarad@arm.com fetch2CycleInput = True 141312149Sashkan.tousimojarad@arm.com 141412149Sashkan.tousimojarad@arm.com decodeInputBufferSize = 3 141512149Sashkan.tousimojarad@arm.com decodeToExecuteForwardDelay = 1 141612149Sashkan.tousimojarad@arm.com decodeInputWidth = 2 141712149Sashkan.tousimojarad@arm.com decodeCycleInput = True 141812149Sashkan.tousimojarad@arm.com 141912149Sashkan.tousimojarad@arm.com executeInputWidth = 2 142012149Sashkan.tousimojarad@arm.com executeCycleInput = True 142112149Sashkan.tousimojarad@arm.com executeIssueLimit = 2 142212149Sashkan.tousimojarad@arm.com 142312149Sashkan.tousimojarad@arm.com # Only allow one ld/st to be issued but the second ld/st FU allows 142412149Sashkan.tousimojarad@arm.com # back-to-back loads 142512149Sashkan.tousimojarad@arm.com executeMemoryIssueLimit = 1 142612149Sashkan.tousimojarad@arm.com 142712149Sashkan.tousimojarad@arm.com executeCommitLimit = 2 142812149Sashkan.tousimojarad@arm.com executeMemoryCommitLimit = 1 142912149Sashkan.tousimojarad@arm.com executeInputBufferSize = 7 143012149Sashkan.tousimojarad@arm.com 143112149Sashkan.tousimojarad@arm.com executeMaxAccessesInMemory = 2 143212149Sashkan.tousimojarad@arm.com 143312149Sashkan.tousimojarad@arm.com executeLSQMaxStoreBufferStoresPerCycle = 2 143412149Sashkan.tousimojarad@arm.com executeLSQRequestsQueueSize = 1 143512149Sashkan.tousimojarad@arm.com executeLSQTransfersQueueSize = 2 143612149Sashkan.tousimojarad@arm.com executeLSQStoreBufferSize = 5 143712149Sashkan.tousimojarad@arm.com executeBranchDelay = 1 143812149Sashkan.tousimojarad@arm.com executeFuncUnits = HPI_FUPool() 143912149Sashkan.tousimojarad@arm.com executeSetTraceTimeOnCommit = True 144012149Sashkan.tousimojarad@arm.com executeSetTraceTimeOnIssue = False 144112149Sashkan.tousimojarad@arm.com 144212149Sashkan.tousimojarad@arm.com executeAllowEarlyMemoryIssue = True 144312149Sashkan.tousimojarad@arm.com 144412149Sashkan.tousimojarad@arm.com enableIdling = True 144512149Sashkan.tousimojarad@arm.com 144613432Spau.cabre@metempsy.com branchPred = HPI_BP() 144712149Sashkan.tousimojarad@arm.com 144812149Sashkan.tousimojarad@arm.com itb = HPI_ITB() 144912149Sashkan.tousimojarad@arm.com dtb = HPI_DTB() 145012149Sashkan.tousimojarad@arm.com 145112149Sashkan.tousimojarad@arm.com__all__ = [ 145212149Sashkan.tousimojarad@arm.com "HPI_BP", 145312149Sashkan.tousimojarad@arm.com "HPI_ITB", "HPI_DTB", "HPI_WalkCache", 145412149Sashkan.tousimojarad@arm.com "HPI_ICache", "HPI_DCache", "HPI_L2", 145512149Sashkan.tousimojarad@arm.com "HPI", 145612149Sashkan.tousimojarad@arm.com] 1457