Add shift test to test_caller, fix fixedshift being weird on 32 bit shifts
[soc.git] / src / soc / decoder / isa / fixedshift.patch
1 --- fixedshift.py.orig 2020-05-09 09:56:10.393656481 -0400
2 +++ fixedshift.py 2020-05-09 10:51:18.674826544 -0400
3 @@ -168,9 +168,9 @@
4 @inject()
5 def op_slw(self, RB, RS):
6 n = RB[59:64]
7 - r = ROTL32(RS[32:64], n)
8 + r = ROTL32(RS[32:64], n.value)
9 if eq(RB[58], 0):
10 - m = MASK(32, 63 - n)
11 + m = MASK(32, 63 - n.value)
12 else:
13 m = concat(0, repeat=64)
14 RA = r & m
15 @@ -179,9 +179,9 @@
16 @inject()
17 def op_slw_(self, RB, RS):
18 n = RB[59:64]
19 - r = ROTL32(RS[32:64], n)
20 + r = ROTL32(RS[32:64], n.value)
21 if eq(RB[58], 0):
22 - m = MASK(32, 63 - n)
23 + m = MASK(32, 63 - n.value)
24 else:
25 m = concat(0, repeat=64)
26 RA = r & m
27 @@ -190,9 +190,9 @@
28 @inject()
29 def op_srw(self, RB, RS):
30 n = RB[59:64]
31 - r = ROTL32(RS[32:64], 64 - n)
32 + r = ROTL32(RS[32:64], 64 - n.value)
33 if eq(RB[58], 0):
34 - m = MASK(n + 32, 63)
35 + m = MASK(n.value + 32, 63)
36 else:
37 m = concat(0, repeat=64)
38 RA = r & m
39 @@ -201,9 +201,9 @@
40 @inject()
41 def op_srw_(self, RB, RS):
42 n = RB[59:64]
43 - r = ROTL32(RS[32:64], 64 - n)
44 + r = ROTL32(RS[32:64], 64 - n.value)
45 if eq(RB[58], 0):
46 - m = MASK(n + 32, 63)
47 + m = MASK(n.value + 32, 63)
48 else:
49 m = concat(0, repeat=64)
50 RA = r & m
51 @@ -212,8 +212,8 @@
52 @inject()
53 def op_srawi(self, RS):
54 n = SH
55 - r = ROTL32(RS[32:64], 64 - n)
56 - m = MASK(n + 32, 63)
57 + r = ROTL32(RS[32:64], 64 - n.value)
58 + m = MASK(n.value + 32, 63)
59 s = RS[32]
60 RA = r & m | concat(s, repeat=64) & ~m
61 carry = s & ne((r & ~m)[32:64], 0)
62 @@ -224,8 +224,8 @@
63 @inject()
64 def op_srawi_(self, RS):
65 n = SH
66 - r = ROTL32(RS[32:64], 64 - n)
67 - m = MASK(n + 32, 63)
68 + r = ROTL32(RS[32:64], 64 - n.value)
69 + m = MASK(n.value + 32, 63)
70 s = RS[32]
71 RA = r & m | concat(s, repeat=64) & ~m
72 carry = s & ne((r & ~m)[32:64], 0)
73 @@ -236,9 +236,9 @@
74 @inject()
75 def op_sraw(self, RB, RS):
76 n = RB[59:64]
77 - r = ROTL32(RS[32:64], 64 - n)
78 + r = ROTL32(RS[32:64], 64 - n.value)
79 if eq(RB[58], 0):
80 - m = MASK(n + 32, 63)
81 + m = MASK(n.value + 32, 63)
82 else:
83 m = concat(0, repeat=64)
84 s = RS[32]
85 @@ -251,9 +251,9 @@
86 @inject()
87 def op_sraw_(self, RB, RS):
88 n = RB[59:64]
89 - r = ROTL32(RS[32:64], 64 - n)
90 + r = ROTL32(RS[32:64], 64 - n.value)
91 if eq(RB[58], 0):
92 - m = MASK(n + 32, 63)
93 + m = MASK(n.value + 32, 63)
94 else:
95 m = concat(0, repeat=64)
96 s = RS[32]