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 --- |