1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 package riscv
30
31 import "github.com/twitchyliquid64/golang-asm/obj"
32
33
34
35 const (
36
37 REG_X0 = obj.RBaseRISCV + iota
38 REG_X1
39 REG_X2
40 REG_X3
41 REG_X4
42 REG_X5
43 REG_X6
44 REG_X7
45 REG_X8
46 REG_X9
47 REG_X10
48 REG_X11
49 REG_X12
50 REG_X13
51 REG_X14
52 REG_X15
53 REG_X16
54 REG_X17
55 REG_X18
56 REG_X19
57 REG_X20
58 REG_X21
59 REG_X22
60 REG_X23
61 REG_X24
62 REG_X25
63 REG_X26
64 REG_X27
65 REG_X28
66 REG_X29
67 REG_X30
68 REG_X31
69
70
71 REG_F0
72 REG_F1
73 REG_F2
74 REG_F3
75 REG_F4
76 REG_F5
77 REG_F6
78 REG_F7
79 REG_F8
80 REG_F9
81 REG_F10
82 REG_F11
83 REG_F12
84 REG_F13
85 REG_F14
86 REG_F15
87 REG_F16
88 REG_F17
89 REG_F18
90 REG_F19
91 REG_F20
92 REG_F21
93 REG_F22
94 REG_F23
95 REG_F24
96 REG_F25
97 REG_F26
98 REG_F27
99 REG_F28
100 REG_F29
101 REG_F30
102 REG_F31
103
104
105 REG_END
106
107
108 REG_ZERO = REG_X0
109 REG_RA = REG_X1
110 REG_SP = REG_X2
111 REG_GP = REG_X3
112 REG_TP = REG_X4
113 REG_T0 = REG_X5
114 REG_T1 = REG_X6
115 REG_T2 = REG_X7
116 REG_S0 = REG_X8
117 REG_S1 = REG_X9
118 REG_A0 = REG_X10
119 REG_A1 = REG_X11
120 REG_A2 = REG_X12
121 REG_A3 = REG_X13
122 REG_A4 = REG_X14
123 REG_A5 = REG_X15
124 REG_A6 = REG_X16
125 REG_A7 = REG_X17
126 REG_S2 = REG_X18
127 REG_S3 = REG_X19
128 REG_S4 = REG_X20
129 REG_S5 = REG_X21
130 REG_S6 = REG_X22
131 REG_S7 = REG_X23
132 REG_S8 = REG_X24
133 REG_S9 = REG_X25
134 REG_S10 = REG_X26
135 REG_S11 = REG_X27
136 REG_T3 = REG_X28
137 REG_T4 = REG_X29
138 REG_T5 = REG_X30
139 REG_T6 = REG_X31
140
141
142 REG_G = REG_TP
143 REG_CTXT = REG_S4
144 REG_LR = REG_RA
145 REG_TMP = REG_T6
146
147
148 REG_FT0 = REG_F0
149 REG_FT1 = REG_F1
150 REG_FT2 = REG_F2
151 REG_FT3 = REG_F3
152 REG_FT4 = REG_F4
153 REG_FT5 = REG_F5
154 REG_FT6 = REG_F6
155 REG_FT7 = REG_F7
156 REG_FS0 = REG_F8
157 REG_FS1 = REG_F9
158 REG_FA0 = REG_F10
159 REG_FA1 = REG_F11
160 REG_FA2 = REG_F12
161 REG_FA3 = REG_F13
162 REG_FA4 = REG_F14
163 REG_FA5 = REG_F15
164 REG_FA6 = REG_F16
165 REG_FA7 = REG_F17
166 REG_FS2 = REG_F18
167 REG_FS3 = REG_F19
168 REG_FS4 = REG_F20
169 REG_FS5 = REG_F21
170 REG_FS6 = REG_F22
171 REG_FS7 = REG_F23
172 REG_FS8 = REG_F24
173 REG_FS9 = REG_F25
174 REG_FS10 = REG_F26
175 REG_FS11 = REG_F27
176 REG_FT8 = REG_F28
177 REG_FT9 = REG_F29
178 REG_FT10 = REG_F30
179 REG_FT11 = REG_F31
180
181
182 REGSP = REG_SP
183 REGG = REG_G
184 )
185
186
187 var RISCV64DWARFRegisters = map[int16]int16{
188
189 REG_X0: 0,
190 REG_X1: 1,
191 REG_X2: 2,
192 REG_X3: 3,
193 REG_X4: 4,
194 REG_X5: 5,
195 REG_X6: 6,
196 REG_X7: 7,
197 REG_X8: 8,
198 REG_X9: 9,
199 REG_X10: 10,
200 REG_X11: 11,
201 REG_X12: 12,
202 REG_X13: 13,
203 REG_X14: 14,
204 REG_X15: 15,
205 REG_X16: 16,
206 REG_X17: 17,
207 REG_X18: 18,
208 REG_X19: 19,
209 REG_X20: 20,
210 REG_X21: 21,
211 REG_X22: 22,
212 REG_X23: 23,
213 REG_X24: 24,
214 REG_X25: 25,
215 REG_X26: 26,
216 REG_X27: 27,
217 REG_X28: 28,
218 REG_X29: 29,
219 REG_X30: 30,
220 REG_X31: 31,
221
222
223 REG_F0: 32,
224 REG_F1: 33,
225 REG_F2: 34,
226 REG_F3: 35,
227 REG_F4: 36,
228 REG_F5: 37,
229 REG_F6: 38,
230 REG_F7: 39,
231 REG_F8: 40,
232 REG_F9: 41,
233 REG_F10: 42,
234 REG_F11: 43,
235 REG_F12: 44,
236 REG_F13: 45,
237 REG_F14: 46,
238 REG_F15: 47,
239 REG_F16: 48,
240 REG_F17: 49,
241 REG_F18: 50,
242 REG_F19: 51,
243 REG_F20: 52,
244 REG_F21: 53,
245 REG_F22: 54,
246 REG_F23: 55,
247 REG_F24: 56,
248 REG_F25: 57,
249 REG_F26: 58,
250 REG_F27: 59,
251 REG_F28: 60,
252 REG_F29: 61,
253 REG_F30: 62,
254 REG_F31: 63,
255 }
256
257
258 const (
259
260
261
262 NEED_PCREL_ITYPE_RELOC = 1 << 0
263
264
265
266
267 NEED_PCREL_STYPE_RELOC = 1 << 1
268 )
269
270
271
272
273
274
275
276
277
278
279
280
281
282 const (
283
284
285
286 AADDI = obj.ABaseRISCV + obj.A_ARCHSPECIFIC + iota
287 ASLTI
288 ASLTIU
289 AANDI
290 AORI
291 AXORI
292 ASLLI
293 ASRLI
294 ASRAI
295 ALUI
296 AAUIPC
297 AADD
298 ASLT
299 ASLTU
300 AAND
301 AOR
302 AXOR
303 ASLL
304 ASRL
305 ASUB
306 ASRA
307
308
309
310 ASLLIRV32
311 ASRLIRV32
312 ASRAIRV32
313
314
315 AJAL
316 AJALR
317 ABEQ
318 ABNE
319 ABLT
320 ABLTU
321 ABGE
322 ABGEU
323
324
325 ALW
326 ALWU
327 ALH
328 ALHU
329 ALB
330 ALBU
331 ASW
332 ASH
333 ASB
334
335
336 AFENCE
337 AFENCEI
338 AFENCETSO
339
340
341 AADDIW
342 ASLLIW
343 ASRLIW
344 ASRAIW
345 AADDW
346 ASLLW
347 ASRLW
348 ASUBW
349 ASRAW
350
351
352 ALD
353 ASD
354
355
356 AMUL
357 AMULH
358 AMULHU
359 AMULHSU
360 AMULW
361 ADIV
362 ADIVU
363 AREM
364 AREMU
365 ADIVW
366 ADIVUW
367 AREMW
368 AREMUW
369
370
371 ALRD
372 ASCD
373 ALRW
374 ASCW
375
376
377 AAMOSWAPD
378 AAMOADDD
379 AAMOANDD
380 AAMOORD
381 AAMOXORD
382 AAMOMAXD
383 AAMOMAXUD
384 AAMOMIND
385 AAMOMINUD
386 AAMOSWAPW
387 AAMOADDW
388 AAMOANDW
389 AAMOORW
390 AAMOXORW
391 AAMOMAXW
392 AAMOMAXUW
393 AAMOMINW
394 AAMOMINUW
395
396
397 ARDCYCLE
398 ARDCYCLEH
399 ARDTIME
400 ARDTIMEH
401 ARDINSTRET
402 ARDINSTRETH
403
404
405 AFRCSR
406 AFSCSR
407 AFRRM
408 AFSRM
409 AFRFLAGS
410 AFSFLAGS
411 AFSRMI
412 AFSFLAGSI
413
414
415 AFLW
416 AFSW
417
418
419 AFADDS
420 AFSUBS
421 AFMULS
422 AFDIVS
423 AFMINS
424 AFMAXS
425 AFSQRTS
426 AFMADDS
427 AFMSUBS
428 AFNMADDS
429 AFNMSUBS
430
431
432 AFCVTWS
433 AFCVTLS
434 AFCVTSW
435 AFCVTSL
436 AFCVTWUS
437 AFCVTLUS
438 AFCVTSWU
439 AFCVTSLU
440 AFSGNJS
441 AFSGNJNS
442 AFSGNJXS
443 AFMVXS
444 AFMVSX
445 AFMVXW
446 AFMVWX
447
448
449 AFEQS
450 AFLTS
451 AFLES
452
453
454 AFCLASSS
455
456
457 AFLD
458 AFSD
459
460
461 AFADDD
462 AFSUBD
463 AFMULD
464 AFDIVD
465 AFMIND
466 AFMAXD
467 AFSQRTD
468 AFMADDD
469 AFMSUBD
470 AFNMADDD
471 AFNMSUBD
472
473
474 AFCVTWD
475 AFCVTLD
476 AFCVTDW
477 AFCVTDL
478 AFCVTWUD
479 AFCVTLUD
480 AFCVTDWU
481 AFCVTDLU
482 AFCVTSD
483 AFCVTDS
484 AFSGNJD
485 AFSGNJND
486 AFSGNJXD
487 AFMVXD
488 AFMVDX
489
490
491 AFEQD
492 AFLTD
493 AFLED
494
495
496 AFCLASSD
497
498
499 AFLQ
500 AFSQ
501
502
503 AFADDQ
504 AFSUBQ
505 AFMULQ
506 AFDIVQ
507 AFMINQ
508 AFMAXQ
509 AFSQRTQ
510 AFMADDQ
511 AFMSUBQ
512 AFNMADDQ
513 AFNMSUBQ
514
515
516 AFCVTWQ
517 AFCVTLQ
518 AFCVTSQ
519 AFCVTDQ
520 AFCVTQW
521 AFCVTQL
522 AFCVTQS
523 AFCVTQD
524 AFCVTWUQ
525 AFCVTLUQ
526 AFCVTQWU
527 AFCVTQLU
528 AFSGNJQ
529 AFSGNJNQ
530 AFSGNJXQ
531 AFMVXQ
532 AFMVQX
533
534
535 AFEQQ
536 AFLEQ
537 AFLTQ
538
539
540 AFCLASSQ
541
542
543
544
545 ACSRRW
546 ACSRRS
547 ACSRRC
548 ACSRRWI
549 ACSRRSI
550 ACSRRCI
551
552
553 AECALL
554 ASCALL
555 AEBREAK
556 ASBREAK
557
558
559 AMRET
560 ASRET
561 AURET
562 ADRET
563
564
565 AWFI
566
567
568 ASFENCEVMA
569
570
571 AHFENCEGVMA
572 AHFENCEVVMA
573
574
575 AWORD
576
577
578
579 ABEQZ
580 ABGEZ
581 ABGT
582 ABGTU
583 ABGTZ
584 ABLE
585 ABLEU
586 ABLEZ
587 ABLTZ
588 ABNEZ
589 AFNEGD
590 AFNEGS
591 AFNED
592 AFNES
593 AMOV
594 AMOVB
595 AMOVBU
596 AMOVF
597 AMOVD
598 AMOVH
599 AMOVHU
600 AMOVW
601 AMOVWU
602 ANEG
603 ANEGW
604 ANOT
605 ASEQZ
606 ASNEZ
607
608
609 ALAST
610 )
611
612
613
614
615
616
617
618 var unaryDst = map[obj.As]bool{
619 ARDCYCLE: true,
620 ARDCYCLEH: true,
621 ARDTIME: true,
622 ARDTIMEH: true,
623 ARDINSTRET: true,
624 ARDINSTRETH: true,
625 }
626
627
628 const (
629
630
631 ITypeImmMask = 0xfff00000
632
633
634
635 STypeImmMask = 0xfe000f80
636
637
638
639 UTypeImmMask = 0xfffff000
640
641
642
643 UJTypeImmMask = UTypeImmMask
644 )
645
View as plain text