##include "misc.isa"
##include "misc64.isa"
+split exec;
+split decoder;
+
//Stores of a single item, AArch64
##include "str64.isa"
//Load/store multiple
##include "macromem.isa"
+split exec;
+
//Data processing instructions
##include "data.isa"
##include "fp.isa"
##include "fp64.isa"
+split exec;
+
//Neon
##include "neon.isa"
//AArch64 Neon
##include "neon64.isa"
+split decoder;
##include "neon64_mem.isa"
-//m5 Psuedo-ops
+//m5 Pseudo-ops
##include "m5ops.isa"
}
}};
-output exec {{
+let {{
+ header_output = ""
+ exec_output = ""
+
+ vcompares = '''
static float
vcgtFunc(float op1, float op2)
{
return 2.0;
return (op1 == op2) ? 0.0 : 1.0;
}
-
+'''
+ vcomparesL = '''
static float
vcleFunc(float op1, float op2)
{
return 2.0;
return (op1 < op2) ? 0.0 : 1.0;
}
-
+'''
+ vacomparesG = '''
static float
vacgtFunc(float op1, float op2)
{
return 2.0;
return (fabsf(op1) >= fabsf(op2)) ? 0.0 : 1.0;
}
-}};
-
-let {{
+'''
- header_output = ""
- exec_output = ""
+ exec_output += vcompares + vacomparesG
smallUnsignedTypes = ("uint8_t", "uint16_t", "uint32_t")
unsignedTypes = smallUnsignedTypes + ("uint64_t",)
twoRegMiscInst("vrev64", "NVrev64D", "SimdAluOp", smallUnsignedTypes, 2, vrev64Code)
twoRegMiscInst("vrev64", "NVrev64Q", "SimdAluOp", smallUnsignedTypes, 4, vrev64Code)
+ split('exec')
+ exec_output += vcompares + vcomparesL
+
vpaddlCode = '''
destElem = (BigElement)srcElem1 + (BigElement)srcElem2;
'''
2, minAcrossCode)
twoRegAcrossInstX("sminv", "SminvQX", "SimdCmpOp", smallSignedTypes, 4,
minAcrossCode)
+
+ split('exec')
+
# SMLAL, SMLAL2 (by element)
mlalCode = "destElem += (BigElement)srcElem1 * (BigElement)srcElem2;"
threeRegLongInstX("smlal", "SmlalElemX", "SimdMultAccOp",