neon.isa (7783:9b880b40ac10) neon.isa (7853:69aae4379062)
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

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

866 if readDest:
867 eWalkCode += '''
868 destReg.regs[%(reg)d] = htog(FpDestP%(reg)d.uw);
869 ''' % { "reg" : reg }
870 readDestCode = ''
871 if readDest:
872 readDestCode = 'destElem = gtoh(destReg.elements[i]);'
873 eWalkCode += '''
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

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

866 if readDest:
867 eWalkCode += '''
868 destReg.regs[%(reg)d] = htog(FpDestP%(reg)d.uw);
869 ''' % { "reg" : reg }
870 readDestCode = ''
871 if readDest:
872 readDestCode = 'destElem = gtoh(destReg.elements[i]);'
873 eWalkCode += '''
874 assert(imm >= 0 && imm < eCount);
875 for (unsigned i = 0; i < eCount; i++) {
876 Element srcElem1 = gtoh(srcReg1.elements[i]);
877 Element srcElem2 = gtoh(srcReg2.elements[imm]);
878 Element destElem;
879 %(readDest)s
880 %(op)s
881 destReg.elements[i] = htog(destElem);
874 if (imm < 0 && imm >= eCount) {
875#if FULL_SYSTEM
876 fault = new UndefinedInstruction;
877#else
878 fault = new UndefinedInstruction(false, mnemonic);
879#endif
880 } else {
881 for (unsigned i = 0; i < eCount; i++) {
882 Element srcElem1 = gtoh(srcReg1.elements[i]);
883 Element srcElem2 = gtoh(srcReg2.elements[imm]);
884 Element destElem;
885 %(readDest)s
886 %(op)s
887 destReg.elements[i] = htog(destElem);
888 }
882 }
883 ''' % { "op" : op, "readDest" : readDestCode }
884 for reg in range(rCount):
885 eWalkCode += '''
886 FpDestP%(reg)d.uw = gtoh(destReg.regs[%(reg)d]);
887 ''' % { "reg" : reg }
888 iop = InstObjParams(name, Name,
889 "RegRegRegImmOp",

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

914 for reg in range(2 * rCount):
915 eWalkCode += '''
916 destReg.regs[%(reg)d] = htog(FpDestP%(reg)d.uw);
917 ''' % { "reg" : reg }
918 readDestCode = ''
919 if readDest:
920 readDestCode = 'destElem = gtoh(destReg.elements[i]);'
921 eWalkCode += '''
889 }
890 ''' % { "op" : op, "readDest" : readDestCode }
891 for reg in range(rCount):
892 eWalkCode += '''
893 FpDestP%(reg)d.uw = gtoh(destReg.regs[%(reg)d]);
894 ''' % { "reg" : reg }
895 iop = InstObjParams(name, Name,
896 "RegRegRegImmOp",

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

921 for reg in range(2 * rCount):
922 eWalkCode += '''
923 destReg.regs[%(reg)d] = htog(FpDestP%(reg)d.uw);
924 ''' % { "reg" : reg }
925 readDestCode = ''
926 if readDest:
927 readDestCode = 'destElem = gtoh(destReg.elements[i]);'
928 eWalkCode += '''
922 assert(imm >= 0 && imm < eCount);
923 for (unsigned i = 0; i < eCount; i++) {
924 Element srcElem1 = gtoh(srcReg1.elements[i]);
925 Element srcElem2 = gtoh(srcReg2.elements[imm]);
926 BigElement destElem;
927 %(readDest)s
928 %(op)s
929 destReg.elements[i] = htog(destElem);
929 if (imm < 0 && imm >= eCount) {
930#if FULL_SYSTEM
931 fault = new UndefinedInstruction;
932#else
933 fault = new UndefinedInstruction(false, mnemonic);
934#endif
935 } else {
936 for (unsigned i = 0; i < eCount; i++) {
937 Element srcElem1 = gtoh(srcReg1.elements[i]);
938 Element srcElem2 = gtoh(srcReg2.elements[imm]);
939 BigElement destElem;
940 %(readDest)s
941 %(op)s
942 destReg.elements[i] = htog(destElem);
943 }
930 }
931 ''' % { "op" : op, "readDest" : readDestCode }
932 for reg in range(2 * rCount):
933 eWalkCode += '''
934 FpDestP%(reg)d.uw = gtoh(destReg.regs[%(reg)d]);
935 ''' % { "reg" : reg }
936 iop = InstObjParams(name, Name,
937 "RegRegRegImmOp",

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

960 if readDest:
961 eWalkCode += '''
962 destRegs[%(reg)d] = FpDestP%(reg)d;
963 ''' % { "reg" : reg }
964 readDestCode = ''
965 if readDest:
966 readDestCode = 'destReg = destRegs[i];'
967 eWalkCode += '''
944 }
945 ''' % { "op" : op, "readDest" : readDestCode }
946 for reg in range(2 * rCount):
947 eWalkCode += '''
948 FpDestP%(reg)d.uw = gtoh(destReg.regs[%(reg)d]);
949 ''' % { "reg" : reg }
950 iop = InstObjParams(name, Name,
951 "RegRegRegImmOp",

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

974 if readDest:
975 eWalkCode += '''
976 destRegs[%(reg)d] = FpDestP%(reg)d;
977 ''' % { "reg" : reg }
978 readDestCode = ''
979 if readDest:
980 readDestCode = 'destReg = destRegs[i];'
981 eWalkCode += '''
968 assert(imm >= 0 && imm < rCount);
969 for (unsigned i = 0; i < rCount; i++) {
970 FloatReg srcReg1 = srcRegs1[i];
971 FloatReg srcReg2 = srcRegs2[imm];
972 FloatReg destReg;
973 %(readDest)s
974 %(op)s
975 destRegs[i] = destReg;
982 if (imm < 0 && imm >= eCount) {
983#if FULL_SYSTEM
984 fault = new UndefinedInstruction;
985#else
986 fault = new UndefinedInstruction(false, mnemonic);
987#endif
988 } else {
989 for (unsigned i = 0; i < rCount; i++) {
990 FloatReg srcReg1 = srcRegs1[i];
991 FloatReg srcReg2 = srcRegs2[imm];
992 FloatReg destReg;
993 %(readDest)s
994 %(op)s
995 destRegs[i] = destReg;
996 }
976 }
977 ''' % { "op" : op, "readDest" : readDestCode }
978 for reg in range(rCount):
979 eWalkCode += '''
980 FpDestP%(reg)d = destRegs[%(reg)d];
981 ''' % { "reg" : reg }
982 iop = InstObjParams(name, Name,
983 "FpRegRegRegImmOp",

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

3272
3273 vextCode = '''
3274 for (unsigned i = 0; i < eCount; i++) {
3275 unsigned index = i + imm;
3276 if (index < eCount) {
3277 destReg.elements[i] = srcReg1.elements[index];
3278 } else {
3279 index -= eCount;
997 }
998 ''' % { "op" : op, "readDest" : readDestCode }
999 for reg in range(rCount):
1000 eWalkCode += '''
1001 FpDestP%(reg)d = destRegs[%(reg)d];
1002 ''' % { "reg" : reg }
1003 iop = InstObjParams(name, Name,
1004 "FpRegRegRegImmOp",

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

3293
3294 vextCode = '''
3295 for (unsigned i = 0; i < eCount; i++) {
3296 unsigned index = i + imm;
3297 if (index < eCount) {
3298 destReg.elements[i] = srcReg1.elements[index];
3299 } else {
3300 index -= eCount;
3280 assert(index < eCount);
3281 destReg.elements[i] = srcReg2.elements[index];
3301 if (index >= eCount)
3302#if FULL_SYSTEM
3303 fault = new UndefinedInstruction;
3304#else
3305 fault = new UndefinedInstruction(false, mnemonic);
3306#endif
3307 else
3308 destReg.elements[i] = srcReg2.elements[index];
3282 }
3283 }
3284 '''
3285 buildVext("vext", "NVextD", "SimdAluOp", ("uint8_t",), 2, vextCode)
3286 buildVext("vext", "NVextQ", "SimdAluOp", ("uint8_t",), 4, vextCode)
3287
3288 def buildVtbxl(name, Name, opClass, length, isVtbl):
3289 global header_output, decoder_output, exec_output

--- 62 unchanged lines hidden ---
3309 }
3310 }
3311 '''
3312 buildVext("vext", "NVextD", "SimdAluOp", ("uint8_t",), 2, vextCode)
3313 buildVext("vext", "NVextQ", "SimdAluOp", ("uint8_t",), 4, vextCode)
3314
3315 def buildVtbxl(name, Name, opClass, length, isVtbl):
3316 global header_output, decoder_output, exec_output

--- 62 unchanged lines hidden ---