arm: add preliminary ISA splits for ARM arch
authorCurtis Dunham <Curtis.Dunham@arm.com>
Fri, 9 May 2014 22:58:47 +0000 (18:58 -0400)
committerCurtis Dunham <Curtis.Dunham@arm.com>
Fri, 9 May 2014 22:58:47 +0000 (18:58 -0400)
src/arch/arm/isa/insts/insts.isa
src/arch/arm/isa/insts/neon.isa
src/arch/arm/isa/insts/neon64.isa

index 2f53d895cb660e32819b4510f7276418c3813376..89c80cbaa16c699a748218388f24b16a96e8b784 100644 (file)
@@ -53,6 +53,9 @@
 ##include "misc.isa"
 ##include "misc64.isa"
 
+split exec;
+split decoder;
+
 //Stores of a single item, AArch64
 ##include "str64.isa"
 
@@ -65,6 +68,8 @@
 //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"
index ca5c3038cf0d2f1f5c63bd7d4f09af2f24bfd5a6..166176602df8cde086deb8e002068d90b3d1530e 100644 (file)
@@ -1058,7 +1058,11 @@ output header {{
     }
 }};
 
-output exec {{
+let {{
+    header_output = ""
+    exec_output = ""
+
+    vcompares = '''
     static float
     vcgtFunc(float op1, float op2)
     {
@@ -1082,7 +1086,8 @@ output exec {{
             return 2.0;
         return (op1 == op2) ? 0.0 : 1.0;
     }
-
+'''
+    vcomparesL = '''
     static float
     vcleFunc(float op1, float op2)
     {
@@ -1098,7 +1103,8 @@ output exec {{
             return 2.0;
         return (op1 < op2) ? 0.0 : 1.0;
     }
-
+'''
+    vacomparesG = '''
     static float
     vacgtFunc(float op1, float op2)
     {
@@ -1114,12 +1120,9 @@ output exec {{
             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",)
@@ -3414,6 +3417,9 @@ let {{
     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;
     '''
index e065761f4d0e0cfa3e9cb746aae1aa093a1a6070..bbe57bdfae73b93773c4f6b79286a2c425fecbb3 100644 (file)
@@ -1959,6 +1959,9 @@ let {{
                       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",