TriCore
®
TC1.6P & TC1.6E
32-bit Unified Processor Core
Instruction Set
V1.0 2013-07
User Manual (Volume 2) 3-192
MADD.QE[c], E[d], D[a] U, D[b] U, n (RRR1)
64 + (16U * 16U) --> 64
sc = (D[a][31:16] == 8000
H
) AND (D[b][31:16] == 8000
H
) AND (n == 1);
mul_res = sc ? 7FFFFFFF
H
: ((D[a][31:16] * D[b][31:16]) << n);
result = E[d] + (mul_res << 16);
E[c] = result[63:0]; // Multi-precision accumulator
MADDS.QD[c], D[d], D[a], D[b], n (RRR1)
32 + (32 * 32)Up --> 32 saturated
result = D[d] + (((D[a] * D[b]) << n) >> 32);
D[c] = ssov(result, 32); // Fraction
MADDS.QE[c], E[d], D[a], D[b], n (RRR1)
64 + (32 * 32) --> 64 saturated
result = E[d] + ((D[a] * D[b]) << n);
E[c] = ssov(result, 64) // Multi-precision fraction
MADDS.QD[c], D[d], D[a], D[b] L, n (RRR1)
32 + (16L * 32)Up --> 32 saturated
result = D[d] + (((D[a] * D[b][15:0]) << n) >> 16);
D[c] = ssov(result, 32); // Fraction
MADDS.QE[c], E[d], D[a], D[b] L, n (RRR1)
64 + (16L * 32) --> 64 saturated
result = E[d] + ((D[a] * D[b][15:0]) << n);
E[c] = ssov(result, 64); // Multi-precision accumulator
MADDS.QD[c], D[d], D[a], D[b] U, n (RRR1)
32 + (16U * 32)Up --> 32 saturated
31
c
28 27
d
24 23
1C
H
18 17
n
16 15
b
12 11
a
8 7
43
H
0
31
c
28 27
d
24 23
22
H
18 17
n
16 15
b
12 11
a
8 7
43
H
0
31
c
28 27
d
24 23
3B
H
18 17
n
16 15
b
12 11
a
8 7
43
H
0
31
c
28 27
d
24 23
21
H
18 17
n
16 15
b
12 11
a
8 7
43
H
0
31
c
28 27
d
24 23
39
H
18 17
n
16 15
b
12 11
a
8 7
43
H
0