Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(290)

Side by Side Diff: pydir/gen_arm32_reg_tables.py

Issue 1528413002: Subzero. ARM32. Fixes register aliasing bugs. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/IceRegistersARM32.def » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 import os 1 import os
2 import sys 2 import sys
3 3
4 class RegAliases(object): 4 class RegAliases(object):
5 def __init__(self, AliasesStr): 5 def __init__(self, AliasesStr):
6 self.Aliases = list(Alias.strip() for Alias in AliasesStr.split(',')) 6 self.Aliases = list(Alias.strip() for Alias in AliasesStr.split(','))
7 7
8 def __str__(self): 8 def __str__(self):
9 return 'REGLIST{AliasCount}(RegARM32, {Aliases})'.format( 9 return 'REGLIST{AliasCount}(RegARM32, {Aliases})'.format(
10 AliasCount=len(self.Aliases), Aliases=', '.join(self.Aliases)) 10 AliasCount=len(self.Aliases), Aliases=', '.join(self.Aliases))
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 self.Encode = Encode 58 self.Encode = Encode
59 if not AsmStr: 59 if not AsmStr:
60 AsmStr = '%s' % Name 60 AsmStr = '%s' % Name
61 self.Features = RegFeatures(AsmStr=AsmStr, **Features) 61 self.Features = RegFeatures(AsmStr=AsmStr, **Features)
62 62
63 def __str__(self): 63 def __str__(self):
64 return 'Reg_{Name}, {Encode}, {Features}'.format(Name=self.Name, 64 return 'Reg_{Name}, {Encode}, {Features}'.format(Name=self.Name,
65 Encode=self.Encode, Features=self.Features) 65 Encode=self.Encode, Features=self.Features)
66 66
67 def IsAnAliasOf(self, Other): 67 def IsAnAliasOf(self, Other):
68 return self.Name in self.Features.Aliases().Aliases 68 return Other.Name in self.Features.Aliases().Aliases
69 69
70 # Note: The following tables break the usual 80-col on purpose -- it is easier 70 # Note: The following tables break the usual 80-col on purpose -- it is easier
71 # to read the register tables if each register entry is contained on a single 71 # to read the register tables if each register entry is contained on a single
72 # line. 72 # line.
73 GPRs = [ 73 GPRs = [
74 Reg( 'r0', 0, IsScratch=1, CCArg=1, IsInt=1, Aliases= 'r0, r 0r1'), 74 Reg( 'r0', 0, IsScratch=1, CCArg=1, IsInt=1, Aliases= 'r0, r 0r1'),
75 Reg( 'r1', 1, IsScratch=1, CCArg=2, IsInt=1, Aliases= 'r1, r 0r1'), 75 Reg( 'r1', 1, IsScratch=1, CCArg=2, IsInt=1, Aliases= 'r1, r 0r1'),
76 Reg( 'r2', 2, IsScratch=1, CCArg=3, IsInt=1, Aliases= 'r2, r 2r3'), 76 Reg( 'r2', 2, IsScratch=1, CCArg=3, IsInt=1, Aliases= 'r2, r 2r3'),
77 Reg( 'r3', 3, IsScratch=1, CCArg=4, IsInt=1, Aliases= 'r3, r 2r3'), 77 Reg( 'r3', 3, IsScratch=1, CCArg=4, IsInt=1, Aliases= 'r3, r 2r3'),
78 Reg( 'r4', 4, IsPreserved=1, IsInt=1, Aliases= 'r4, r 4r5'), 78 Reg( 'r4', 4, IsPreserved=1, IsInt=1, Aliases= 'r4, r 4r5'),
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 Reg('s21', 21, IsPreserved=1, IsFP32=1, Aliases='s21, d10, q5'), 123 Reg('s21', 21, IsPreserved=1, IsFP32=1, Aliases='s21, d10, q5'),
124 Reg('s22', 22, IsPreserved=1, IsFP32=1, Aliases='s22, d11, q5'), 124 Reg('s22', 22, IsPreserved=1, IsFP32=1, Aliases='s22, d11, q5'),
125 Reg('s23', 23, IsPreserved=1, IsFP32=1, Aliases='s23, d11, q5'), 125 Reg('s23', 23, IsPreserved=1, IsFP32=1, Aliases='s23, d11, q5'),
126 Reg('s24', 24, IsPreserved=1, IsFP32=1, Aliases='s24, d12, q6'), 126 Reg('s24', 24, IsPreserved=1, IsFP32=1, Aliases='s24, d12, q6'),
127 Reg('s25', 25, IsPreserved=1, IsFP32=1, Aliases='s25, d12, q6'), 127 Reg('s25', 25, IsPreserved=1, IsFP32=1, Aliases='s25, d12, q6'),
128 Reg('s26', 26, IsPreserved=1, IsFP32=1, Aliases='s26, d13, q6'), 128 Reg('s26', 26, IsPreserved=1, IsFP32=1, Aliases='s26, d13, q6'),
129 Reg('s27', 27, IsPreserved=1, IsFP32=1, Aliases='s27, d13, q6'), 129 Reg('s27', 27, IsPreserved=1, IsFP32=1, Aliases='s27, d13, q6'),
130 Reg('s28', 28, IsPreserved=1, IsFP32=1, Aliases='s28, d14, q7'), 130 Reg('s28', 28, IsPreserved=1, IsFP32=1, Aliases='s28, d14, q7'),
131 Reg('s29', 29, IsPreserved=1, IsFP32=1, Aliases='s29, d14, q7'), 131 Reg('s29', 29, IsPreserved=1, IsFP32=1, Aliases='s29, d14, q7'),
132 Reg('s30', 30, IsPreserved=1, IsFP32=1, Aliases='s30, d15, q7'), 132 Reg('s30', 30, IsPreserved=1, IsFP32=1, Aliases='s30, d15, q7'),
133 Reg('s31', 31, IsPreserved=1, IsFP32=1, Aliases='s31, d14, q7'), 133 Reg('s31', 31, IsPreserved=1, IsFP32=1, Aliases='s31, d15, q7'),
134 ] 134 ]
135 135
136 FP64 = [ 136 FP64 = [
137 Reg( 'd0', 0, IsScratch=1, CCArg=1, IsFP64=1, Aliases= 'd0, q0, s0, s1') , 137 Reg( 'd0', 0, IsScratch=1, CCArg=1, IsFP64=1, Aliases= 'd0, q0, s0, s1') ,
138 Reg( 'd1', 1, IsScratch=1, CCArg=2, IsFP64=1, Aliases= 'd1, q0, s2, s3') , 138 Reg( 'd1', 1, IsScratch=1, CCArg=2, IsFP64=1, Aliases= 'd1, q0, s2, s3') ,
139 Reg( 'd2', 2, IsScratch=1, CCArg=3, IsFP64=1, Aliases= 'd2, q1, s4, s5') , 139 Reg( 'd2', 2, IsScratch=1, CCArg=3, IsFP64=1, Aliases= 'd2, q1, s4, s5') ,
140 Reg( 'd3', 3, IsScratch=1, CCArg=4, IsFP64=1, Aliases= 'd3, q1, s6, s7') , 140 Reg( 'd3', 3, IsScratch=1, CCArg=4, IsFP64=1, Aliases= 'd3, q1, s6, s7') ,
141 Reg( 'd4', 4, IsScratch=1, CCArg=5, IsFP64=1, Aliases= 'd4, q2, s8, s9') , 141 Reg( 'd4', 4, IsScratch=1, CCArg=5, IsFP64=1, Aliases= 'd4, q2, s8, s9') ,
142 Reg( 'd5', 5, IsScratch=1, CCArg=6, IsFP64=1, Aliases= 'd5, q2, s10, s11') , 142 Reg( 'd5', 5, IsScratch=1, CCArg=6, IsFP64=1, Aliases= 'd5, q2, s10, s11') ,
143 Reg( 'd6', 6, IsScratch=1, CCArg=7, IsFP64=1, Aliases= 'd6, q3, s12, s13') , 143 Reg( 'd6', 6, IsScratch=1, CCArg=7, IsFP64=1, Aliases= 'd6, q3, s12, s13') ,
144 Reg( 'd7', 7, IsScratch=1, CCArg=8, IsFP64=1, Aliases= 'd7, q3, s14, s15') , 144 Reg( 'd7', 7, IsScratch=1, CCArg=8, IsFP64=1, Aliases= 'd7, q3, s14, s15') ,
145 Reg( 'd8', 8, IsPreserved=1, IsFP64=1, Aliases= 'd8, q4, s16, s17') , 145 Reg( 'd8', 8, IsPreserved=1, IsFP64=1, Aliases= 'd8, q4, s16, s17') ,
146 Reg( 'd9', 9, IsPreserved=1, IsFP64=1, Aliases= 'd9, q4, s18, s19') , 146 Reg( 'd9', 9, IsPreserved=1, IsFP64=1, Aliases= 'd9, q4, s18, s19') ,
147 Reg('d10', 10, IsPreserved=1, IsFP64=1, Aliases='d10, q5, s20, s21') , 147 Reg('d10', 10, IsPreserved=1, IsFP64=1, Aliases='d10, q5, s20, s21') ,
148 Reg('d11', 11, IsPreserved=1, IsFP64=1, Aliases='d11, q5, s22, s24') , 148 Reg('d11', 11, IsPreserved=1, IsFP64=1, Aliases='d11, q5, s22, s23') ,
149 Reg('d12', 12, IsPreserved=1, IsFP64=1, Aliases='d12, q6, s24, s25') , 149 Reg('d12', 12, IsPreserved=1, IsFP64=1, Aliases='d12, q6, s24, s25') ,
150 Reg('d13', 13, IsPreserved=1, IsFP64=1, Aliases='d13, q6, s26, s27') , 150 Reg('d13', 13, IsPreserved=1, IsFP64=1, Aliases='d13, q6, s26, s27') ,
151 Reg('d14', 14, IsPreserved=1, IsFP64=1, Aliases='d14, q7, s28, s28') , 151 Reg('d14', 14, IsPreserved=1, IsFP64=1, Aliases='d14, q7, s28, s29') ,
152 Reg('d15', 15, IsPreserved=1, IsFP64=1, Aliases='d15, q7, s30, s31') , 152 Reg('d15', 15, IsPreserved=1, IsFP64=1, Aliases='d15, q7, s30, s31') ,
153 Reg('d16', 16, IsScratch=1, IsFP64=1, Aliases='d16, q8'), 153 Reg('d16', 16, IsScratch=1, IsFP64=1, Aliases='d16, q8'),
154 Reg('d17', 17, IsScratch=1, IsFP64=1, Aliases='d17, q8'), 154 Reg('d17', 17, IsScratch=1, IsFP64=1, Aliases='d17, q8'),
155 Reg('d18', 18, IsScratch=1, IsFP64=1, Aliases='d18, q9'), 155 Reg('d18', 18, IsScratch=1, IsFP64=1, Aliases='d18, q9'),
156 Reg('d19', 19, IsScratch=1, IsFP64=1, Aliases='d19, q9'), 156 Reg('d19', 19, IsScratch=1, IsFP64=1, Aliases='d19, q9'),
157 Reg('d20', 20, IsScratch=1, IsFP64=1, Aliases='d20, q10'), 157 Reg('d20', 20, IsScratch=1, IsFP64=1, Aliases='d20, q10'),
158 Reg('d21', 21, IsScratch=1, IsFP64=1, Aliases='d21, q10'), 158 Reg('d21', 21, IsScratch=1, IsFP64=1, Aliases='d21, q10'),
159 Reg('d22', 22, IsScratch=1, IsFP64=1, Aliases='d22, q11'), 159 Reg('d22', 22, IsScratch=1, IsFP64=1, Aliases='d22, q11'),
160 Reg('d23', 23, IsScratch=1, IsFP64=1, Aliases='d23, q11'), 160 Reg('d23', 23, IsScratch=1, IsFP64=1, Aliases='d23, q11'),
161 Reg('d24', 24, IsScratch=1, IsFP64=1, Aliases='d24, q12'), 161 Reg('d24', 24, IsScratch=1, IsFP64=1, Aliases='d24, q12'),
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 AllRegs = {} 196 AllRegs = {}
197 for _, RegClass in RegClasses: 197 for _, RegClass in RegClasses:
198 for Reg in RegClass: 198 for Reg in RegClass:
199 assert Reg.Name not in AllRegs 199 assert Reg.Name not in AllRegs
200 AllRegs[Reg.Name] = Reg 200 AllRegs[Reg.Name] = Reg
201 201
202 for _, RegClass in RegClasses: 202 for _, RegClass in RegClasses:
203 for Reg in RegClass: 203 for Reg in RegClass:
204 for Alias in AllRegs[Reg.Name].Features.Aliases().Aliases: 204 for Alias in AllRegs[Reg.Name].Features.Aliases().Aliases:
205 assert AllRegs[Alias].IsAnAliasOf(Reg), '%s VS %s' % (Reg, AllRegs[Alias]) 205 assert AllRegs[Alias].IsAnAliasOf(Reg), '%s VS %s' % (Reg, AllRegs[Alias])
206 assert AllRegs[Alias].IsAnAliasOf(Reg), '%s VS %s' % (Reg, AllRegs[Alias])
207 assert (AllRegs[Alias].Features.LivesInGPR() == 206 assert (AllRegs[Alias].Features.LivesInGPR() ==
208 Reg.Features.LivesInGPR()), '%s VS %s' % (Reg, AllRegs[Alias]) 207 Reg.Features.LivesInGPR()), '%s VS %s' % (Reg, AllRegs[Alias])
209 assert (AllRegs[Alias].Features.LivesInVFP() == 208 assert (AllRegs[Alias].Features.LivesInVFP() ==
210 Reg.Features.LivesInVFP()), '%s VS %s' % (Reg, AllRegs[Alias]) 209 Reg.Features.LivesInVFP()), '%s VS %s' % (Reg, AllRegs[Alias])
211 210
212 print ("// This file was auto generated by the {script} script.\n" 211 print ("// This file was auto generated by the {script} script.\n"
213 "// Do not modify it: modify the script instead.\n" 212 "// Do not modify it: modify the script instead.\n"
214 "\n" 213 "\n"
215 "#ifndef SUBZERO_SRC_ICEREGISTERSARM32_DEF\n" 214 "#ifndef SUBZERO_SRC_ICEREGISTERSARM32_DEF\n"
216 "#define SUBZERO_SRC_ICEREGISTERSARM32_DEF\n".format(script=os.path.basen ame(sys.argv[0]))) 215 "#define SUBZERO_SRC_ICEREGISTERSARM32_DEF\n".format(script=os.path.basen ame(sys.argv[0])))
217 216
218 for Name, RegClass in RegClasses: 217 for Name, RegClass in RegClasses:
219 print "#define REGARM32_%s_TABLE" % Name, 218 print "#define REGARM32_%s_TABLE" % Name,
220 for Reg in RegClass: 219 for Reg in RegClass:
221 print '\\\n X({Reg})'.format(Reg=Reg), 220 print '\\\n X({Reg})'.format(Reg=Reg),
222 print '\n' 221 print '\n'
223 print "#endif // SUBZERO_SRC_ICEREGISTERSARM32_DEF", 222 print "#endif // SUBZERO_SRC_ICEREGISTERSARM32_DEF",
OLDNEW
« no previous file with comments | « no previous file | src/IceRegistersARM32.def » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698