mediaop.isa (11160:10f28b61fcb1) mediaop.isa (11320:42ecb523c64a)
1// Copyright (c) 2009 The Regents of The University of Michigan
2// Copyright (c) 2015 Advanced Micro Devices, Inc.
3//
4// All rights reserved.
5//
6// Redistribution and use in source and binary forms, with or without
7// modification, are permitted provided that the following conditions are
8// met: redistributions of source code must retain the above copyright

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

209 self.destSize = destSize
210 if self.srcSize is None:
211 raise Exception, "Source size not set."
212 if self.destSize is None:
213 raise Exception, "Dest size not set."
214 if ext is None:
215 self.ext = 0
216 else:
1// Copyright (c) 2009 The Regents of The University of Michigan
2// Copyright (c) 2015 Advanced Micro Devices, Inc.
3//
4// All rights reserved.
5//
6// Redistribution and use in source and binary forms, with or without
7// modification, are permitted provided that the following conditions are
8// met: redistributions of source code must retain the above copyright

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

209 self.destSize = destSize
210 if self.srcSize is None:
211 raise Exception, "Source size not set."
212 if self.destSize is None:
213 raise Exception, "Dest size not set."
214 if ext is None:
215 self.ext = 0
216 else:
217 self.ext = ext
217 self.ext = ext
218
219 def getAllocator(self, microFlags):
220 className = self.className
221 if self.mnemonic == self.base_mnemonic + 'i':
222 className += "Imm"
223 allocator = '''new %(class_name)s(machInst, macrocodeBlock,
224 %(flags)s, %(src1)s, %(op2)s, %(dest)s,
225 %(srcSize)s, %(destSize)s, %(ext)s)''' % {

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

921 uint64_t result = FpDestReg_uqw;
922
923 for (int i = 0; i < items; i++) {
924 int hiIndex = (i + 1) * sizeBits - 1;
925 int loIndex = (i + 0) * sizeBits;
926 uint64_t arg1Bits = bits(FpSrcReg1_uqw, hiIndex, loIndex);
927 uint64_t arg2Bits = bits(FpSrcReg2_uqw, hiIndex, loIndex);
928 uint64_t resBits = arg1Bits + arg2Bits;
218
219 def getAllocator(self, microFlags):
220 className = self.className
221 if self.mnemonic == self.base_mnemonic + 'i':
222 className += "Imm"
223 allocator = '''new %(class_name)s(machInst, macrocodeBlock,
224 %(flags)s, %(src1)s, %(op2)s, %(dest)s,
225 %(srcSize)s, %(destSize)s, %(ext)s)''' % {

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

921 uint64_t result = FpDestReg_uqw;
922
923 for (int i = 0; i < items; i++) {
924 int hiIndex = (i + 1) * sizeBits - 1;
925 int loIndex = (i + 0) * sizeBits;
926 uint64_t arg1Bits = bits(FpSrcReg1_uqw, hiIndex, loIndex);
927 uint64_t arg2Bits = bits(FpSrcReg2_uqw, hiIndex, loIndex);
928 uint64_t resBits = arg1Bits + arg2Bits;
929
929
930 if (ext & 0x2) {
931 if (signedOp()) {
932 int arg1Sign = bits(arg1Bits, sizeBits - 1);
933 int arg2Sign = bits(arg2Bits, sizeBits - 1);
934 int resSign = bits(resBits, sizeBits - 1);
935 if ((arg1Sign == arg2Sign) && (arg1Sign != resSign)) {
936 if (resSign == 0)
937 resBits = (ULL(1) << (sizeBits - 1));

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

958 uint64_t result = FpDestReg_uqw;
959
960 for (int i = 0; i < items; i++) {
961 int hiIndex = (i + 1) * sizeBits - 1;
962 int loIndex = (i + 0) * sizeBits;
963 uint64_t arg1Bits = bits(FpSrcReg1_uqw, hiIndex, loIndex);
964 uint64_t arg2Bits = bits(FpSrcReg2_uqw, hiIndex, loIndex);
965 uint64_t resBits = arg1Bits - arg2Bits;
930 if (ext & 0x2) {
931 if (signedOp()) {
932 int arg1Sign = bits(arg1Bits, sizeBits - 1);
933 int arg2Sign = bits(arg2Bits, sizeBits - 1);
934 int resSign = bits(resBits, sizeBits - 1);
935 if ((arg1Sign == arg2Sign) && (arg1Sign != resSign)) {
936 if (resSign == 0)
937 resBits = (ULL(1) << (sizeBits - 1));

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

958 uint64_t result = FpDestReg_uqw;
959
960 for (int i = 0; i < items; i++) {
961 int hiIndex = (i + 1) * sizeBits - 1;
962 int loIndex = (i + 0) * sizeBits;
963 uint64_t arg1Bits = bits(FpSrcReg1_uqw, hiIndex, loIndex);
964 uint64_t arg2Bits = bits(FpSrcReg2_uqw, hiIndex, loIndex);
965 uint64_t resBits = arg1Bits - arg2Bits;
966
966
967 if (ext & 0x2) {
968 if (signedOp()) {
969 int arg1Sign = bits(arg1Bits, sizeBits - 1);
970 int arg2Sign = !bits(arg2Bits, sizeBits - 1);
971 int resSign = bits(resBits, sizeBits - 1);
972 if ((arg1Sign == arg2Sign) && (arg1Sign != resSign)) {
973 if (resSign == 0)
974 resBits = (ULL(1) << (sizeBits - 1));

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

1020 (0 - (arg2Bits & (ULL(1) << (srcBits - 1))));
1021 resBits = (uint64_t)(arg1 * arg2);
1022 } else {
1023 resBits = arg1Bits * arg2Bits;
1024 }
1025
1026 if (ext & 0x4)
1027 resBits += (ULL(1) << (destBits - 1));
967 if (ext & 0x2) {
968 if (signedOp()) {
969 int arg1Sign = bits(arg1Bits, sizeBits - 1);
970 int arg2Sign = !bits(arg2Bits, sizeBits - 1);
971 int resSign = bits(resBits, sizeBits - 1);
972 if ((arg1Sign == arg2Sign) && (arg1Sign != resSign)) {
973 if (resSign == 0)
974 resBits = (ULL(1) << (sizeBits - 1));

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

1020 (0 - (arg2Bits & (ULL(1) << (srcBits - 1))));
1021 resBits = (uint64_t)(arg1 * arg2);
1022 } else {
1023 resBits = arg1Bits * arg2Bits;
1024 }
1025
1026 if (ext & 0x4)
1027 resBits += (ULL(1) << (destBits - 1));
1028
1028
1029 if (multHi())
1030 resBits >>= destBits;
1031
1032 int destHiIndex = (i + 1) * destBits - 1;
1033 int destLoIndex = (i + 0) * destBits;
1034 result = insertBits(result, destHiIndex, destLoIndex, resBits);
1035 }
1036 FpDestReg_uqw = result;

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

1045 uint64_t result = FpDestReg_uqw;
1046
1047 for (int i = 0; i < items; i++) {
1048 int hiIndex = (i + 1) * sizeBits - 1;
1049 int loIndex = (i + 0) * sizeBits;
1050 uint64_t arg1Bits = bits(FpSrcReg1_uqw, hiIndex, loIndex);
1051 uint64_t arg2Bits = bits(FpSrcReg2_uqw, hiIndex, loIndex);
1052 uint64_t resBits = (arg1Bits + arg2Bits + 1) / 2;
1029 if (multHi())
1030 resBits >>= destBits;
1031
1032 int destHiIndex = (i + 1) * destBits - 1;
1033 int destLoIndex = (i + 0) * destBits;
1034 result = insertBits(result, destHiIndex, destLoIndex, resBits);
1035 }
1036 FpDestReg_uqw = result;

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

1045 uint64_t result = FpDestReg_uqw;
1046
1047 for (int i = 0; i < items; i++) {
1048 int hiIndex = (i + 1) * sizeBits - 1;
1049 int loIndex = (i + 0) * sizeBits;
1050 uint64_t arg1Bits = bits(FpSrcReg1_uqw, hiIndex, loIndex);
1051 uint64_t arg2Bits = bits(FpSrcReg2_uqw, hiIndex, loIndex);
1052 uint64_t resBits = (arg1Bits + arg2Bits + 1) / 2;
1053
1053
1054 result = insertBits(result, hiIndex, loIndex, resBits);
1055 }
1056 FpDestReg_uqw = result;
1057 '''
1058
1059 class Msad(MediaOp):
1060 code = '''
1061 int srcBits = srcSize * 8;

--- 487 unchanged lines hidden ---
1054 result = insertBits(result, hiIndex, loIndex, resBits);
1055 }
1056 FpDestReg_uqw = result;
1057 '''
1058
1059 class Msad(MediaOp):
1060 code = '''
1061 int srcBits = srcSize * 8;

--- 487 unchanged lines hidden ---