neon.isa (7639:8c09b7ff5b57) neon.isa (7640:5286a8a469c5)
1// -*- mode:c++ -*-
2
3// Copyright (c) 2010 ARM Limited
4// All rights reserved
5//
6// The license below extends only to copyright in the software and shall
7// not be construed as granting a license to any other intellectual
8// property including but not limited to intellectual property relating

--- 606 unchanged lines hidden (view full) ---

615 {
616 if (isSnan(op1) || isSnan(op2))
617 return 2.0;
618 return (fabsf(op1) >= fabsf(op2)) ? 0.0 : 1.0;
619 }
620}};
621
622let {{
1// -*- mode:c++ -*-
2
3// Copyright (c) 2010 ARM Limited
4// All rights reserved
5//
6// The license below extends only to copyright in the software and shall
7// not be construed as granting a license to any other intellectual
8// property including but not limited to intellectual property relating

--- 606 unchanged lines hidden (view full) ---

615 {
616 if (isSnan(op1) || isSnan(op2))
617 return 2.0;
618 return (fabsf(op1) >= fabsf(op2)) ? 0.0 : 1.0;
619 }
620}};
621
622let {{
623 simdEnabledCheckCode = '''
624 if (!neonEnabled(Cpacr, Cpsr, Fpexc))
625 return disabledFault();
626 '''
627}};
623
628
629let {{
630
624 header_output = ""
625 exec_output = ""
626
627 smallUnsignedTypes = ("uint8_t", "uint16_t", "uint32_t")
628 unsignedTypes = smallUnsignedTypes + ("uint64_t",)
629 smallSignedTypes = ("int8_t", "int16_t", "int32_t")
630 signedTypes = smallSignedTypes + ("int64_t",)
631 smallTypes = smallUnsignedTypes + smallSignedTypes
632 allTypes = unsignedTypes + signedTypes
633
634 def threeEqualRegInst(name, Name, types, rCount, op,
635 readDest=False, pairwise=False):
636 global header_output, exec_output
631 header_output = ""
632 exec_output = ""
633
634 smallUnsignedTypes = ("uint8_t", "uint16_t", "uint32_t")
635 unsignedTypes = smallUnsignedTypes + ("uint64_t",)
636 smallSignedTypes = ("int8_t", "int16_t", "int32_t")
637 signedTypes = smallSignedTypes + ("int64_t",)
638 smallTypes = smallUnsignedTypes + smallSignedTypes
639 allTypes = unsignedTypes + signedTypes
640
641 def threeEqualRegInst(name, Name, types, rCount, op,
642 readDest=False, pairwise=False):
643 global header_output, exec_output
637 eWalkCode = '''
644 eWalkCode = simdEnabledCheckCode + '''
638 RegVect srcReg1, srcReg2, destReg;
639 '''
640 for reg in range(rCount):
641 eWalkCode += '''
642 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
643 srcReg2.regs[%(reg)d] = htog(FpOp2P%(reg)d.uw);
644 ''' % { "reg" : reg }
645 if readDest:

--- 43 unchanged lines hidden (view full) ---

689 for type in types:
690 substDict = { "targs" : type,
691 "class_name" : Name }
692 exec_output += NeonExecDeclare.subst(substDict)
693
694 def threeEqualRegInstFp(name, Name, types, rCount, op,
695 readDest=False, pairwise=False, toInt=False):
696 global header_output, exec_output
645 RegVect srcReg1, srcReg2, destReg;
646 '''
647 for reg in range(rCount):
648 eWalkCode += '''
649 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
650 srcReg2.regs[%(reg)d] = htog(FpOp2P%(reg)d.uw);
651 ''' % { "reg" : reg }
652 if readDest:

--- 43 unchanged lines hidden (view full) ---

696 for type in types:
697 substDict = { "targs" : type,
698 "class_name" : Name }
699 exec_output += NeonExecDeclare.subst(substDict)
700
701 def threeEqualRegInstFp(name, Name, types, rCount, op,
702 readDest=False, pairwise=False, toInt=False):
703 global header_output, exec_output
697 eWalkCode = '''
704 eWalkCode = simdEnabledCheckCode + '''
698 typedef FloatReg FloatVect[rCount];
699 FloatVect srcRegs1, srcRegs2;
700 '''
701 if toInt:
702 eWalkCode += 'RegVect destRegs;\n'
703 else:
704 eWalkCode += 'FloatVect destRegs;\n'
705 for reg in range(rCount):

--- 78 unchanged lines hidden (view full) ---

784 src1Cnt = 4
785 src1Prefix = 'Big'
786 if bigSrc2:
787 src2Cnt = 4
788 src2Prefix = 'Big'
789 if bigDest:
790 destCnt = 4
791 destPrefix = 'Big'
705 typedef FloatReg FloatVect[rCount];
706 FloatVect srcRegs1, srcRegs2;
707 '''
708 if toInt:
709 eWalkCode += 'RegVect destRegs;\n'
710 else:
711 eWalkCode += 'FloatVect destRegs;\n'
712 for reg in range(rCount):

--- 78 unchanged lines hidden (view full) ---

791 src1Cnt = 4
792 src1Prefix = 'Big'
793 if bigSrc2:
794 src2Cnt = 4
795 src2Prefix = 'Big'
796 if bigDest:
797 destCnt = 4
798 destPrefix = 'Big'
792 eWalkCode = '''
799 eWalkCode = simdEnabledCheckCode + '''
793 %sRegVect srcReg1;
794 %sRegVect srcReg2;
795 %sRegVect destReg;
796 ''' % (src1Prefix, src2Prefix, destPrefix)
797 for reg in range(src1Cnt):
798 eWalkCode += '''
799 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
800 ''' % { "reg" : reg }

--- 46 unchanged lines hidden (view full) ---

847 False, False, True, readDest)
848
849 def threeRegWideInst(name, Name, types, op, readDest=False):
850 threeUnequalRegInst(name, Name, types, op,
851 True, False, True, readDest)
852
853 def twoEqualRegInst(name, Name, types, rCount, op, readDest=False):
854 global header_output, exec_output
800 %sRegVect srcReg1;
801 %sRegVect srcReg2;
802 %sRegVect destReg;
803 ''' % (src1Prefix, src2Prefix, destPrefix)
804 for reg in range(src1Cnt):
805 eWalkCode += '''
806 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
807 ''' % { "reg" : reg }

--- 46 unchanged lines hidden (view full) ---

854 False, False, True, readDest)
855
856 def threeRegWideInst(name, Name, types, op, readDest=False):
857 threeUnequalRegInst(name, Name, types, op,
858 True, False, True, readDest)
859
860 def twoEqualRegInst(name, Name, types, rCount, op, readDest=False):
861 global header_output, exec_output
855 eWalkCode = '''
862 eWalkCode = simdEnabledCheckCode + '''
856 RegVect srcReg1, srcReg2, destReg;
857 '''
858 for reg in range(rCount):
859 eWalkCode += '''
860 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
861 srcReg2.regs[%(reg)d] = htog(FpOp2P%(reg)d.uw);
862 ''' % { "reg" : reg }
863 if readDest:

--- 28 unchanged lines hidden (view full) ---

892 for type in types:
893 substDict = { "targs" : type,
894 "class_name" : Name }
895 exec_output += NeonExecDeclare.subst(substDict)
896
897 def twoRegLongInst(name, Name, types, op, readDest=False):
898 global header_output, exec_output
899 rCount = 2
863 RegVect srcReg1, srcReg2, destReg;
864 '''
865 for reg in range(rCount):
866 eWalkCode += '''
867 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
868 srcReg2.regs[%(reg)d] = htog(FpOp2P%(reg)d.uw);
869 ''' % { "reg" : reg }
870 if readDest:

--- 28 unchanged lines hidden (view full) ---

899 for type in types:
900 substDict = { "targs" : type,
901 "class_name" : Name }
902 exec_output += NeonExecDeclare.subst(substDict)
903
904 def twoRegLongInst(name, Name, types, op, readDest=False):
905 global header_output, exec_output
906 rCount = 2
900 eWalkCode = '''
907 eWalkCode = simdEnabledCheckCode + '''
901 RegVect srcReg1, srcReg2;
902 BigRegVect destReg;
903 '''
904 for reg in range(rCount):
905 eWalkCode += '''
906 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
907 srcReg2.regs[%(reg)d] = htog(FpOp2P%(reg)d.uw);;
908 ''' % { "reg" : reg }

--- 29 unchanged lines hidden (view full) ---

938 exec_output += NeonUnequalRegExecute.subst(iop)
939 for type in types:
940 substDict = { "targs" : type,
941 "class_name" : Name }
942 exec_output += NeonExecDeclare.subst(substDict)
943
944 def twoEqualRegInstFp(name, Name, types, rCount, op, readDest=False):
945 global header_output, exec_output
908 RegVect srcReg1, srcReg2;
909 BigRegVect destReg;
910 '''
911 for reg in range(rCount):
912 eWalkCode += '''
913 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
914 srcReg2.regs[%(reg)d] = htog(FpOp2P%(reg)d.uw);;
915 ''' % { "reg" : reg }

--- 29 unchanged lines hidden (view full) ---

945 exec_output += NeonUnequalRegExecute.subst(iop)
946 for type in types:
947 substDict = { "targs" : type,
948 "class_name" : Name }
949 exec_output += NeonExecDeclare.subst(substDict)
950
951 def twoEqualRegInstFp(name, Name, types, rCount, op, readDest=False):
952 global header_output, exec_output
946 eWalkCode = '''
953 eWalkCode = simdEnabledCheckCode + '''
947 typedef FloatReg FloatVect[rCount];
948 FloatVect srcRegs1, srcRegs2, destRegs;
949 '''
950 for reg in range(rCount):
951 eWalkCode += '''
952 srcRegs1[%(reg)d] = FpOp1P%(reg)d;
953 srcRegs2[%(reg)d] = FpOp2P%(reg)d;
954 ''' % { "reg" : reg }

--- 29 unchanged lines hidden (view full) ---

984 for type in types:
985 substDict = { "targs" : type,
986 "class_name" : Name }
987 exec_output += NeonExecDeclare.subst(substDict)
988
989 def twoRegShiftInst(name, Name, types, rCount, op,
990 readDest=False, toInt=False, fromInt=False):
991 global header_output, exec_output
954 typedef FloatReg FloatVect[rCount];
955 FloatVect srcRegs1, srcRegs2, destRegs;
956 '''
957 for reg in range(rCount):
958 eWalkCode += '''
959 srcRegs1[%(reg)d] = FpOp1P%(reg)d;
960 srcRegs2[%(reg)d] = FpOp2P%(reg)d;
961 ''' % { "reg" : reg }

--- 29 unchanged lines hidden (view full) ---

991 for type in types:
992 substDict = { "targs" : type,
993 "class_name" : Name }
994 exec_output += NeonExecDeclare.subst(substDict)
995
996 def twoRegShiftInst(name, Name, types, rCount, op,
997 readDest=False, toInt=False, fromInt=False):
998 global header_output, exec_output
992 eWalkCode = '''
999 eWalkCode = simdEnabledCheckCode + '''
993 RegVect srcRegs1, destRegs;
994 '''
995 for reg in range(rCount):
996 eWalkCode += '''
997 srcRegs1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
998 ''' % { "reg" : reg }
999 if readDest:
1000 eWalkCode += '''

--- 38 unchanged lines hidden (view full) ---

1039 exec_output += NeonEqualRegExecute.subst(iop)
1040 for type in types:
1041 substDict = { "targs" : type,
1042 "class_name" : Name }
1043 exec_output += NeonExecDeclare.subst(substDict)
1044
1045 def twoRegNarrowShiftInst(name, Name, types, op, readDest=False):
1046 global header_output, exec_output
1000 RegVect srcRegs1, destRegs;
1001 '''
1002 for reg in range(rCount):
1003 eWalkCode += '''
1004 srcRegs1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
1005 ''' % { "reg" : reg }
1006 if readDest:
1007 eWalkCode += '''

--- 38 unchanged lines hidden (view full) ---

1046 exec_output += NeonEqualRegExecute.subst(iop)
1047 for type in types:
1048 substDict = { "targs" : type,
1049 "class_name" : Name }
1050 exec_output += NeonExecDeclare.subst(substDict)
1051
1052 def twoRegNarrowShiftInst(name, Name, types, op, readDest=False):
1053 global header_output, exec_output
1047 eWalkCode = '''
1054 eWalkCode = simdEnabledCheckCode + '''
1048 BigRegVect srcReg1;
1049 RegVect destReg;
1050 '''
1051 for reg in range(4):
1052 eWalkCode += '''
1053 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
1054 ''' % { "reg" : reg }
1055 if readDest:

--- 26 unchanged lines hidden (view full) ---

1082 exec_output += NeonUnequalRegExecute.subst(iop)
1083 for type in types:
1084 substDict = { "targs" : type,
1085 "class_name" : Name }
1086 exec_output += NeonExecDeclare.subst(substDict)
1087
1088 def twoRegLongShiftInst(name, Name, types, op, readDest=False):
1089 global header_output, exec_output
1055 BigRegVect srcReg1;
1056 RegVect destReg;
1057 '''
1058 for reg in range(4):
1059 eWalkCode += '''
1060 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
1061 ''' % { "reg" : reg }
1062 if readDest:

--- 26 unchanged lines hidden (view full) ---

1089 exec_output += NeonUnequalRegExecute.subst(iop)
1090 for type in types:
1091 substDict = { "targs" : type,
1092 "class_name" : Name }
1093 exec_output += NeonExecDeclare.subst(substDict)
1094
1095 def twoRegLongShiftInst(name, Name, types, op, readDest=False):
1096 global header_output, exec_output
1090 eWalkCode = '''
1097 eWalkCode = simdEnabledCheckCode + '''
1091 RegVect srcReg1;
1092 BigRegVect destReg;
1093 '''
1094 for reg in range(2):
1095 eWalkCode += '''
1096 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
1097 ''' % { "reg" : reg }
1098 if readDest:

--- 26 unchanged lines hidden (view full) ---

1125 exec_output += NeonUnequalRegExecute.subst(iop)
1126 for type in types:
1127 substDict = { "targs" : type,
1128 "class_name" : Name }
1129 exec_output += NeonExecDeclare.subst(substDict)
1130
1131 def twoRegMiscInst(name, Name, types, rCount, op, readDest=False):
1132 global header_output, exec_output
1098 RegVect srcReg1;
1099 BigRegVect destReg;
1100 '''
1101 for reg in range(2):
1102 eWalkCode += '''
1103 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
1104 ''' % { "reg" : reg }
1105 if readDest:

--- 26 unchanged lines hidden (view full) ---

1132 exec_output += NeonUnequalRegExecute.subst(iop)
1133 for type in types:
1134 substDict = { "targs" : type,
1135 "class_name" : Name }
1136 exec_output += NeonExecDeclare.subst(substDict)
1137
1138 def twoRegMiscInst(name, Name, types, rCount, op, readDest=False):
1139 global header_output, exec_output
1133 eWalkCode = '''
1140 eWalkCode = simdEnabledCheckCode + '''
1134 RegVect srcReg1, destReg;
1135 '''
1136 for reg in range(rCount):
1137 eWalkCode += '''
1138 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
1139 ''' % { "reg" : reg }
1140 if readDest:
1141 eWalkCode += '''

--- 25 unchanged lines hidden (view full) ---

1167 exec_output += NeonEqualRegExecute.subst(iop)
1168 for type in types:
1169 substDict = { "targs" : type,
1170 "class_name" : Name }
1171 exec_output += NeonExecDeclare.subst(substDict)
1172
1173 def twoRegMiscScInst(name, Name, types, rCount, op, readDest=False):
1174 global header_output, exec_output
1141 RegVect srcReg1, destReg;
1142 '''
1143 for reg in range(rCount):
1144 eWalkCode += '''
1145 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
1146 ''' % { "reg" : reg }
1147 if readDest:
1148 eWalkCode += '''

--- 25 unchanged lines hidden (view full) ---

1174 exec_output += NeonEqualRegExecute.subst(iop)
1175 for type in types:
1176 substDict = { "targs" : type,
1177 "class_name" : Name }
1178 exec_output += NeonExecDeclare.subst(substDict)
1179
1180 def twoRegMiscScInst(name, Name, types, rCount, op, readDest=False):
1181 global header_output, exec_output
1175 eWalkCode = '''
1182 eWalkCode = simdEnabledCheckCode + '''
1176 RegVect srcReg1, destReg;
1177 '''
1178 for reg in range(rCount):
1179 eWalkCode += '''
1180 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
1181 ''' % { "reg" : reg }
1182 if readDest:
1183 eWalkCode += '''

--- 24 unchanged lines hidden (view full) ---

1208 exec_output += NeonEqualRegExecute.subst(iop)
1209 for type in types:
1210 substDict = { "targs" : type,
1211 "class_name" : Name }
1212 exec_output += NeonExecDeclare.subst(substDict)
1213
1214 def twoRegMiscScramble(name, Name, types, rCount, op, readDest=False):
1215 global header_output, exec_output
1183 RegVect srcReg1, destReg;
1184 '''
1185 for reg in range(rCount):
1186 eWalkCode += '''
1187 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
1188 ''' % { "reg" : reg }
1189 if readDest:
1190 eWalkCode += '''

--- 24 unchanged lines hidden (view full) ---

1215 exec_output += NeonEqualRegExecute.subst(iop)
1216 for type in types:
1217 substDict = { "targs" : type,
1218 "class_name" : Name }
1219 exec_output += NeonExecDeclare.subst(substDict)
1220
1221 def twoRegMiscScramble(name, Name, types, rCount, op, readDest=False):
1222 global header_output, exec_output
1216 eWalkCode = '''
1223 eWalkCode = simdEnabledCheckCode + '''
1217 RegVect srcReg1, destReg;
1218 '''
1219 for reg in range(rCount):
1220 eWalkCode += '''
1221 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
1222 destReg.regs[%(reg)d] = htog(FpDestP%(reg)d.uw);
1223 ''' % { "reg" : reg }
1224 if readDest:

--- 18 unchanged lines hidden (view full) ---

1243 for type in types:
1244 substDict = { "targs" : type,
1245 "class_name" : Name }
1246 exec_output += NeonExecDeclare.subst(substDict)
1247
1248 def twoRegMiscInstFp(name, Name, types, rCount, op,
1249 readDest=False, toInt=False):
1250 global header_output, exec_output
1224 RegVect srcReg1, destReg;
1225 '''
1226 for reg in range(rCount):
1227 eWalkCode += '''
1228 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
1229 destReg.regs[%(reg)d] = htog(FpDestP%(reg)d.uw);
1230 ''' % { "reg" : reg }
1231 if readDest:

--- 18 unchanged lines hidden (view full) ---

1250 for type in types:
1251 substDict = { "targs" : type,
1252 "class_name" : Name }
1253 exec_output += NeonExecDeclare.subst(substDict)
1254
1255 def twoRegMiscInstFp(name, Name, types, rCount, op,
1256 readDest=False, toInt=False):
1257 global header_output, exec_output
1251 eWalkCode = '''
1258 eWalkCode = simdEnabledCheckCode + '''
1252 typedef FloatReg FloatVect[rCount];
1253 FloatVect srcRegs1;
1254 '''
1255 if toInt:
1256 eWalkCode += 'RegVect destRegs;\n'
1257 else:
1258 eWalkCode += 'FloatVect destRegs;\n'
1259 for reg in range(rCount):

--- 47 unchanged lines hidden (view full) ---

1307 exec_output += NeonEqualRegExecute.subst(iop)
1308 for type in types:
1309 substDict = { "targs" : type,
1310 "class_name" : Name }
1311 exec_output += NeonExecDeclare.subst(substDict)
1312
1313 def twoRegCondenseInst(name, Name, types, rCount, op, readDest=False):
1314 global header_output, exec_output
1259 typedef FloatReg FloatVect[rCount];
1260 FloatVect srcRegs1;
1261 '''
1262 if toInt:
1263 eWalkCode += 'RegVect destRegs;\n'
1264 else:
1265 eWalkCode += 'FloatVect destRegs;\n'
1266 for reg in range(rCount):

--- 47 unchanged lines hidden (view full) ---

1314 exec_output += NeonEqualRegExecute.subst(iop)
1315 for type in types:
1316 substDict = { "targs" : type,
1317 "class_name" : Name }
1318 exec_output += NeonExecDeclare.subst(substDict)
1319
1320 def twoRegCondenseInst(name, Name, types, rCount, op, readDest=False):
1321 global header_output, exec_output
1315 eWalkCode = '''
1322 eWalkCode = simdEnabledCheckCode + '''
1316 RegVect srcRegs;
1317 BigRegVect destReg;
1318 '''
1319 for reg in range(rCount):
1320 eWalkCode += '''
1321 srcRegs.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
1322 ''' % { "reg" : reg }
1323 if readDest:

--- 26 unchanged lines hidden (view full) ---

1350 exec_output += NeonUnequalRegExecute.subst(iop)
1351 for type in types:
1352 substDict = { "targs" : type,
1353 "class_name" : Name }
1354 exec_output += NeonExecDeclare.subst(substDict)
1355
1356 def twoRegNarrowMiscInst(name, Name, types, op, readDest=False):
1357 global header_output, exec_output
1323 RegVect srcRegs;
1324 BigRegVect destReg;
1325 '''
1326 for reg in range(rCount):
1327 eWalkCode += '''
1328 srcRegs.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
1329 ''' % { "reg" : reg }
1330 if readDest:

--- 26 unchanged lines hidden (view full) ---

1357 exec_output += NeonUnequalRegExecute.subst(iop)
1358 for type in types:
1359 substDict = { "targs" : type,
1360 "class_name" : Name }
1361 exec_output += NeonExecDeclare.subst(substDict)
1362
1363 def twoRegNarrowMiscInst(name, Name, types, op, readDest=False):
1364 global header_output, exec_output
1358 eWalkCode = '''
1365 eWalkCode = simdEnabledCheckCode + '''
1359 BigRegVect srcReg1;
1360 RegVect destReg;
1361 '''
1362 for reg in range(4):
1363 eWalkCode += '''
1364 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
1365 ''' % { "reg" : reg }
1366 if readDest:

--- 26 unchanged lines hidden (view full) ---

1393 exec_output += NeonUnequalRegExecute.subst(iop)
1394 for type in types:
1395 substDict = { "targs" : type,
1396 "class_name" : Name }
1397 exec_output += NeonExecDeclare.subst(substDict)
1398
1399 def oneRegImmInst(name, Name, types, rCount, op, readDest=False):
1400 global header_output, exec_output
1366 BigRegVect srcReg1;
1367 RegVect destReg;
1368 '''
1369 for reg in range(4):
1370 eWalkCode += '''
1371 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
1372 ''' % { "reg" : reg }
1373 if readDest:

--- 26 unchanged lines hidden (view full) ---

1400 exec_output += NeonUnequalRegExecute.subst(iop)
1401 for type in types:
1402 substDict = { "targs" : type,
1403 "class_name" : Name }
1404 exec_output += NeonExecDeclare.subst(substDict)
1405
1406 def oneRegImmInst(name, Name, types, rCount, op, readDest=False):
1407 global header_output, exec_output
1401 eWalkCode = '''
1408 eWalkCode = simdEnabledCheckCode + '''
1402 RegVect destReg;
1403 '''
1404 if readDest:
1405 for reg in range(rCount):
1406 eWalkCode += '''
1407 destReg.regs[%(reg)d] = htog(FpDestP%(reg)d.uw);
1408 ''' % { "reg" : reg }
1409 readDestCode = ''

--- 20 unchanged lines hidden (view full) ---

1430 exec_output += NeonEqualRegExecute.subst(iop)
1431 for type in types:
1432 substDict = { "targs" : type,
1433 "class_name" : Name }
1434 exec_output += NeonExecDeclare.subst(substDict)
1435
1436 def twoRegLongMiscInst(name, Name, types, op, readDest=False):
1437 global header_output, exec_output
1409 RegVect destReg;
1410 '''
1411 if readDest:
1412 for reg in range(rCount):
1413 eWalkCode += '''
1414 destReg.regs[%(reg)d] = htog(FpDestP%(reg)d.uw);
1415 ''' % { "reg" : reg }
1416 readDestCode = ''

--- 20 unchanged lines hidden (view full) ---

1437 exec_output += NeonEqualRegExecute.subst(iop)
1438 for type in types:
1439 substDict = { "targs" : type,
1440 "class_name" : Name }
1441 exec_output += NeonExecDeclare.subst(substDict)
1442
1443 def twoRegLongMiscInst(name, Name, types, op, readDest=False):
1444 global header_output, exec_output
1438 eWalkCode = '''
1445 eWalkCode = simdEnabledCheckCode + '''
1439 RegVect srcReg1;
1440 BigRegVect destReg;
1441 '''
1442 for reg in range(2):
1443 eWalkCode += '''
1444 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
1445 ''' % { "reg" : reg }
1446 if readDest:

--- 1897 unchanged lines hidden ---
1446 RegVect srcReg1;
1447 BigRegVect destReg;
1448 '''
1449 for reg in range(2):
1450 eWalkCode += '''
1451 srcReg1.regs[%(reg)d] = htog(FpOp1P%(reg)d.uw);
1452 ''' % { "reg" : reg }
1453 if readDest:

--- 1897 unchanged lines hidden ---