PyNerva 0.0.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. nervapy/__init__.py +50 -0
  2. nervapy/abi.py +91 -0
  3. nervapy/arm/__init__.py +124 -0
  4. nervapy/arm/__main__.py +0 -0
  5. nervapy/arm/abi.py +138 -0
  6. nervapy/arm/formats.py +49 -0
  7. nervapy/arm/function.py +2465 -0
  8. nervapy/arm/generic.py +10796 -0
  9. nervapy/arm/instructions.py +519 -0
  10. nervapy/arm/isa.py +409 -0
  11. nervapy/arm/literal_pool.py +331 -0
  12. nervapy/arm/microarchitecture.py +211 -0
  13. nervapy/arm/pseudo.py +652 -0
  14. nervapy/arm/registers.py +1458 -0
  15. nervapy/arm/vfpneon.py +4092 -0
  16. nervapy/arm.py +13 -0
  17. nervapy/c/__init__.py +1 -0
  18. nervapy/c/types.py +436 -0
  19. nervapy/codegen.py +99 -0
  20. nervapy/common/__init__.py +4 -0
  21. nervapy/common/function.py +5 -0
  22. nervapy/common/regalloc.py +121 -0
  23. nervapy/constant_data.py +282 -0
  24. nervapy/encoder.py +246 -0
  25. nervapy/formats/__init__.py +2 -0
  26. nervapy/formats/elf/__init__.py +4 -0
  27. nervapy/formats/elf/file.py +178 -0
  28. nervapy/formats/elf/image.py +106 -0
  29. nervapy/formats/elf/section.py +422 -0
  30. nervapy/formats/elf/symbol.py +281 -0
  31. nervapy/formats/macho/__init__.py +2 -0
  32. nervapy/formats/macho/file.py +123 -0
  33. nervapy/formats/macho/image.py +143 -0
  34. nervapy/formats/macho/section.py +322 -0
  35. nervapy/formats/macho/symbol.py +158 -0
  36. nervapy/formats/mscoff/__init__.py +8 -0
  37. nervapy/formats/mscoff/image.py +132 -0
  38. nervapy/formats/mscoff/section.py +181 -0
  39. nervapy/formats/mscoff/symbol.py +148 -0
  40. nervapy/function.py +136 -0
  41. nervapy/literal.py +731 -0
  42. nervapy/loader.py +188 -0
  43. nervapy/name.py +159 -0
  44. nervapy/parse.py +52 -0
  45. nervapy/stream.py +58 -0
  46. nervapy/util.py +126 -0
  47. nervapy/writer.py +518 -0
  48. nervapy/x86_64/__init__.py +324 -0
  49. nervapy/x86_64/__main__.py +407 -0
  50. nervapy/x86_64/abi.py +517 -0
  51. nervapy/x86_64/amd.py +6464 -0
  52. nervapy/x86_64/avx.py +102029 -0
  53. nervapy/x86_64/crypto.py +1533 -0
  54. nervapy/x86_64/encoding.py +424 -0
  55. nervapy/x86_64/fma.py +19138 -0
  56. nervapy/x86_64/function.py +2707 -0
  57. nervapy/x86_64/generic.py +23384 -0
  58. nervapy/x86_64/instructions.py +500 -0
  59. nervapy/x86_64/isa.py +476 -0
  60. nervapy/x86_64/lower.py +126 -0
  61. nervapy/x86_64/mask.py +2593 -0
  62. nervapy/x86_64/meta.py +143 -0
  63. nervapy/x86_64/mmxsse.py +17265 -0
  64. nervapy/x86_64/nacl.py +327 -0
  65. nervapy/x86_64/operand.py +1204 -0
  66. nervapy/x86_64/options.py +21 -0
  67. nervapy/x86_64/pseudo.py +686 -0
  68. nervapy/x86_64/registers.py +1225 -0
  69. nervapy/x86_64/types.py +17 -0
  70. nervapy/x86_64/uarch.py +580 -0
  71. pynerva-0.0.7.dist-info/METADATA +310 -0
  72. pynerva-0.0.7.dist-info/RECORD +74 -0
  73. pynerva-0.0.7.dist-info/WHEEL +4 -0
  74. pynerva-0.0.7.dist-info/licenses/LICENSE.rst +15 -0
nervapy/arm/isa.py ADDED
@@ -0,0 +1,409 @@
1
+ # This file is part of PeachPy package and is licensed under the Simplified BSD license.
2
+ # See license.rst for the full text of the license.
3
+
4
+
5
+ class Extension:
6
+ def __init__(self, name):
7
+ if name in {
8
+ "V4",
9
+ "V5",
10
+ "V5E",
11
+ "V6",
12
+ "V6K",
13
+ "V7",
14
+ "V7MP",
15
+ "V7M",
16
+ "Div",
17
+ "Thumb",
18
+ "Thumb2",
19
+ "VFP",
20
+ "VFP2",
21
+ "VFP3",
22
+ "VFPd32",
23
+ "VFPHP",
24
+ "VFP4",
25
+ "VFPVectorMode",
26
+ "XScale",
27
+ "WMMX",
28
+ "WMMX2",
29
+ "NEON",
30
+ "NEONHP",
31
+ "NEON2",
32
+ "DSP",
33
+ "V8MBase",
34
+ "V8MMain",
35
+ "V8_1MMain",
36
+ "TrustZone",
37
+ "MVE",
38
+ }:
39
+ self.name = name
40
+ else:
41
+ raise ValueError(
42
+ "Invalid ISA extension: {0} is not supported on this architecture".format(
43
+ name
44
+ )
45
+ )
46
+
47
+ def __eq__(self, other):
48
+ return self.name == other.name
49
+
50
+ def __ne__(self, other):
51
+ return self.name != other.name
52
+
53
+ def __gt__(self, other):
54
+ return other in self.prerequisites
55
+
56
+ def __lt__(self, other):
57
+ return self in other.prerequisites
58
+
59
+ @property
60
+ def prerequisites(self):
61
+ return {
62
+ "V4": [Extension.V4],
63
+ "V5": [Extension.V4, Extension.V5],
64
+ "V5E": [Extension.V4, Extension.V5, Extension.V5E],
65
+ "V6": [Extension.V4, Extension.V5, Extension.V5E, Extension.V6],
66
+ "V6K": [
67
+ Extension.V4,
68
+ Extension.V5,
69
+ Extension.V5E,
70
+ Extension.V6,
71
+ Extension.V6K,
72
+ ],
73
+ "V7": [
74
+ Extension.V4,
75
+ Extension.V5,
76
+ Extension.V5E,
77
+ Extension.V6,
78
+ Extension.V6K,
79
+ Extension.V7,
80
+ ],
81
+ "V7MP": [
82
+ Extension.V4,
83
+ Extension.V5,
84
+ Extension.V5E,
85
+ Extension.V6,
86
+ Extension.V6K,
87
+ Extension.V7,
88
+ Extension.V7MP,
89
+ ],
90
+ "V7M": [
91
+ Extension.V4,
92
+ Extension.V5,
93
+ Extension.V5E,
94
+ Extension.V6,
95
+ Extension.V6K,
96
+ Extension.V7,
97
+ Extension.V7M,
98
+ ],
99
+ "Div": [
100
+ Extension.V4,
101
+ Extension.V5,
102
+ Extension.V5E,
103
+ Extension.V6,
104
+ Extension.V6K,
105
+ Extension.V7,
106
+ Extension.V7MP,
107
+ Extension.Div,
108
+ ],
109
+ "DSP": [Extension.DSP],
110
+ "Thumb": [Extension.Thumb],
111
+ "Thumb2": [Extension.Thumb, Extension.Thumb2],
112
+ "VFP": [Extension.VFP],
113
+ "VFP2": [Extension.VFP, Extension.VFP2],
114
+ "VFP3": [Extension.VFP, Extension.VFP2, Extension.VFP3],
115
+ "VFPd32": [Extension.VFP, Extension.VFP2, Extension.VFP3, Extension.VFPd32],
116
+ "VFPHP": [Extension.VFP, Extension.VFP2, Extension.VFP3, Extension.VFPHP],
117
+ "VFP4": [
118
+ Extension.VFP,
119
+ Extension.VFP2,
120
+ Extension.VFP3,
121
+ Extension.VFPHP,
122
+ Extension.VFP4,
123
+ ],
124
+ "VFPVectorMode": [Extension.VFP, Extension.VFP2, Extension.VFPVectorMode],
125
+ "XScale": [Extension.XScale],
126
+ "WMMX": [Extension.WMMX],
127
+ "WMMX2": [Extension.WMMX, Extension.WMMX2],
128
+ "NEON": [
129
+ Extension.VFP,
130
+ Extension.VFP2,
131
+ Extension.VFP3,
132
+ Extension.VFPd32,
133
+ Extension.NEON,
134
+ ],
135
+ "NEONHP": [
136
+ Extension.VFP,
137
+ Extension.VFP2,
138
+ Extension.VFP3,
139
+ Extension.VFPd32,
140
+ Extension.NEON,
141
+ Extension.NEONHP,
142
+ ],
143
+ "NEON2": [
144
+ Extension.VFP,
145
+ Extension.VFP2,
146
+ Extension.VFP3,
147
+ Extension.VFPd32,
148
+ Extension.NEON,
149
+ Extension.NEONHP,
150
+ Extension.NEON2,
151
+ ],
152
+ # ARMv8-M extensions
153
+ "V8MBase": [
154
+ Extension.V4,
155
+ Extension.V5,
156
+ Extension.V5E,
157
+ Extension.V6,
158
+ Extension.V8MBase,
159
+ ],
160
+ "V8MMain": [
161
+ Extension.V4,
162
+ Extension.V5,
163
+ Extension.V5E,
164
+ Extension.V6,
165
+ Extension.V6K,
166
+ Extension.V7,
167
+ Extension.V7M,
168
+ Extension.V8MMain,
169
+ ],
170
+ "V8_1MMain": [
171
+ Extension.V4,
172
+ Extension.V5,
173
+ Extension.V5E,
174
+ Extension.V6,
175
+ Extension.V6K,
176
+ Extension.V7,
177
+ Extension.V7M,
178
+ Extension.V8MMain,
179
+ Extension.V8_1MMain,
180
+ ],
181
+ "TrustZone": [Extension.TrustZone],
182
+ "MVE": [Extension.MVE],
183
+ }[self.name]
184
+
185
+ @property
186
+ def ancestors(self):
187
+ return {
188
+ "V4": [Extension.V4],
189
+ "V5": [Extension.V4, Extension.V5],
190
+ "V5E": [Extension.V4, Extension.V5, Extension.V5E],
191
+ "V6": [Extension.V4, Extension.V5, Extension.V5E, Extension.V6],
192
+ "V6K": [
193
+ Extension.V4,
194
+ Extension.V5,
195
+ Extension.V5E,
196
+ Extension.V6,
197
+ Extension.V6K,
198
+ ],
199
+ "V7": [
200
+ Extension.V4,
201
+ Extension.V5,
202
+ Extension.V5E,
203
+ Extension.V6,
204
+ Extension.V6K,
205
+ Extension.V7,
206
+ ],
207
+ "V7MP": [
208
+ Extension.V4,
209
+ Extension.V5,
210
+ Extension.V5E,
211
+ Extension.V6,
212
+ Extension.V6K,
213
+ Extension.V7,
214
+ Extension.V7MP,
215
+ ],
216
+ "V7M": [
217
+ Extension.V4,
218
+ Extension.V5,
219
+ Extension.V5E,
220
+ Extension.V6,
221
+ Extension.V6K,
222
+ Extension.V7,
223
+ Extension.V7M,
224
+ ],
225
+ "Div": [Extension.Div],
226
+ "DSP": [Extension.DSP],
227
+ "Thumb": [Extension.Thumb],
228
+ "Thumb2": [Extension.Thumb, Extension.Thumb2],
229
+ "VFP": [Extension.VFP],
230
+ "VFP2": [Extension.VFP, Extension.VFP2],
231
+ "VFP3": [Extension.VFP, Extension.VFP2, Extension.VFP3],
232
+ "VFPd32": [Extension.VFPd32],
233
+ "VFPHP": [Extension.VFPHP],
234
+ "VFP4": [
235
+ Extension.VFP,
236
+ Extension.VFP2,
237
+ Extension.VFP3,
238
+ Extension.VFPHP,
239
+ Extension.VFP4,
240
+ ],
241
+ "VFPVectorMode": [Extension.VFPVectorMode],
242
+ "XScale": [Extension.XScale],
243
+ "WMMX": [Extension.WMMX],
244
+ "WMMX2": [Extension.WMMX, Extension.WMMX2],
245
+ "NEON": [Extension.NEON],
246
+ "NEONHP": [Extension.NEON, Extension.NEONHP],
247
+ "NEON2": [Extension.NEON, Extension.NEONHP, Extension.NEON2],
248
+ # ARMv8-M extensions
249
+ "V8MBase": [Extension.V8MBase],
250
+ "V8MMain": [Extension.V8MMain],
251
+ "V8_1MMain": [Extension.V8_1MMain],
252
+ "TrustZone": [Extension.TrustZone],
253
+ "MVE": [Extension.MVE],
254
+ }[self.name]
255
+
256
+ def __add__(self, extension):
257
+ return Extensions(self, extension)
258
+
259
+ def __hash__(self):
260
+ return hash(self.name)
261
+
262
+ def __str__(self):
263
+ return self.name
264
+
265
+ V4: "Extension"
266
+ V5: "Extension"
267
+ V5E: "Extension"
268
+ V6: "Extension"
269
+ V6K: "Extension"
270
+ V7: "Extension"
271
+ V7MP: "Extension"
272
+ V7M: "Extension"
273
+ Div: "Extension"
274
+ DSP: "Extension"
275
+ Thumb: "Extension"
276
+ Thumb2: "Extension"
277
+ VFP: "Extension"
278
+ VFP2: "Extension"
279
+ VFP3: "Extension"
280
+ VFP4: "Extension"
281
+ VFPVectorMode: "Extension"
282
+ VFPd32: "Extension"
283
+ VFPHP: "Extension"
284
+ XScale: "Extension"
285
+ WMMX: "Extension"
286
+ WMMX2: "Extension"
287
+ NEON: "Extension"
288
+ NEONHP: "Extension"
289
+ NEON2: "Extension"
290
+ V8MBase: "Extension"
291
+ V8MMain: "Extension"
292
+ V8_1MMain: "Extension"
293
+ TrustZone: "Extension"
294
+ MVE: "Extension"
295
+ All: list
296
+
297
+
298
+ Extension.V4 = Extension("V4")
299
+ Extension.V5 = Extension("V5")
300
+ Extension.V5E = Extension("V5E")
301
+ Extension.V6 = Extension("V6")
302
+ Extension.V6K = Extension("V6K")
303
+ Extension.V7 = Extension("V7")
304
+ Extension.V7MP = Extension("V7MP")
305
+ Extension.V7M = Extension("V7M")
306
+ Extension.Div = Extension("Div")
307
+ Extension.DSP = Extension("DSP")
308
+ Extension.Thumb = Extension("Thumb")
309
+ Extension.Thumb2 = Extension("Thumb2")
310
+ Extension.VFP = Extension("VFP")
311
+ Extension.VFP2 = Extension("VFP2")
312
+ Extension.VFP3 = Extension("VFP3")
313
+ Extension.VFP4 = Extension("VFP4")
314
+ Extension.VFPd32 = Extension("VFPd32")
315
+ Extension.VFPHP = Extension("VFPHP")
316
+ Extension.VFPVectorMode = Extension("VFPVectorMode")
317
+ Extension.XScale = Extension("XScale")
318
+ Extension.WMMX = Extension("WMMX")
319
+ Extension.WMMX2 = Extension("WMMX2")
320
+ Extension.NEON = Extension("NEON")
321
+ Extension.NEONHP = Extension("NEONHP")
322
+ Extension.NEON2 = Extension("NEON2")
323
+ Extension.V8MBase = Extension("V8MBase")
324
+ Extension.V8MMain = Extension("V8MMain")
325
+ Extension.V8_1MMain = Extension("V8_1MMain")
326
+ Extension.TrustZone = Extension("TrustZone")
327
+ Extension.MVE = Extension("MVE")
328
+ Extension.All = [
329
+ Extension.V4,
330
+ Extension.V5,
331
+ Extension.V5E,
332
+ Extension.V6,
333
+ Extension.V6K,
334
+ Extension.V7,
335
+ Extension.V7MP,
336
+ Extension.V7M,
337
+ Extension.Div,
338
+ Extension.DSP,
339
+ Extension.Thumb,
340
+ Extension.Thumb2,
341
+ Extension.VFP,
342
+ Extension.VFP2,
343
+ Extension.VFP3,
344
+ Extension.VFP4,
345
+ Extension.VFPd32,
346
+ Extension.VFPHP,
347
+ Extension.VFPVectorMode,
348
+ Extension.XScale,
349
+ Extension.WMMX,
350
+ Extension.WMMX2,
351
+ Extension.NEON,
352
+ Extension.NEONHP,
353
+ Extension.NEON2,
354
+ Extension.V8MBase,
355
+ Extension.V8MMain,
356
+ Extension.V8_1MMain,
357
+ Extension.TrustZone,
358
+ Extension.MVE,
359
+ ]
360
+
361
+
362
+ class Extensions:
363
+ def __init__(self, *args):
364
+ self.extensions = set()
365
+ for extension in args:
366
+ if extension is None:
367
+ pass
368
+ elif isinstance(extension, Extensions):
369
+ self.extensions.add(extension.extensions)
370
+ elif isinstance(extension, Extension):
371
+ self.extensions.add(extension)
372
+ else:
373
+ self.extensions.add(Extension(extension))
374
+
375
+ def __add__(self, extension):
376
+ extensions = set(self.extensions)
377
+ if isinstance(extension, Extension):
378
+ extensions.add(extension)
379
+ else:
380
+ extensions.add(Extension(extension))
381
+ return Extensions(*extensions)
382
+
383
+ def __sub__(self, extension):
384
+ extensions = set(self.extensions)
385
+ if extension in extensions:
386
+ del extensions[extension]
387
+ else:
388
+ raise KeyError("Extension set does not contain {0}".format(extension))
389
+ return Extensions(*extensions)
390
+
391
+ def __str__(self):
392
+ extensions = list(reversed(sorted(self.extensions)))
393
+ for extension in extensions:
394
+ for ancestor in extension.ancestors:
395
+ if ancestor != extension and ancestor in extensions:
396
+ extensions.remove(ancestor)
397
+ return ", ".join(sorted(map(str, extensions)))
398
+
399
+ def __contains__(self, item):
400
+ return item in self.extensions
401
+
402
+ def __len__(self):
403
+ return len(self.extensions)
404
+
405
+ def __not__(self):
406
+ return not self.extensions
407
+
408
+ def __iter__(self):
409
+ return iter(self.extensions)