...
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
30
31 package arm
32
33 import (
34 "github.com/twitchyliquid64/golang-asm/obj"
35 "fmt"
36 )
37
38 func init() {
39 obj.RegisterRegister(obj.RBaseARM, MAXREG, rconv)
40 obj.RegisterOpcode(obj.ABaseARM, Anames)
41 obj.RegisterRegisterList(obj.RegListARMLo, obj.RegListARMHi, rlconv)
42 obj.RegisterOpSuffix("arm", obj.CConvARM)
43 }
44
45 func rconv(r int) string {
46 if r == 0 {
47 return "NONE"
48 }
49 if r == REGG {
50
51 return "g"
52 }
53 if REG_R0 <= r && r <= REG_R15 {
54 return fmt.Sprintf("R%d", r-REG_R0)
55 }
56 if REG_F0 <= r && r <= REG_F15 {
57 return fmt.Sprintf("F%d", r-REG_F0)
58 }
59
60 switch r {
61 case REG_FPSR:
62 return "FPSR"
63
64 case REG_FPCR:
65 return "FPCR"
66
67 case REG_CPSR:
68 return "CPSR"
69
70 case REG_SPSR:
71 return "SPSR"
72
73 case REG_MB_SY:
74 return "MB_SY"
75 case REG_MB_ST:
76 return "MB_ST"
77 case REG_MB_ISH:
78 return "MB_ISH"
79 case REG_MB_ISHST:
80 return "MB_ISHST"
81 case REG_MB_NSH:
82 return "MB_NSH"
83 case REG_MB_NSHST:
84 return "MB_NSHST"
85 case REG_MB_OSH:
86 return "MB_OSH"
87 case REG_MB_OSHST:
88 return "MB_OSHST"
89 }
90
91 return fmt.Sprintf("Rgok(%d)", r-obj.RBaseARM)
92 }
93
94 func DRconv(a int) string {
95 s := "C_??"
96 if a >= C_NONE && a <= C_NCLASS {
97 s = cnames5[a]
98 }
99 var fp string
100 fp += s
101 return fp
102 }
103
104 func rlconv(list int64) string {
105 str := ""
106 for i := 0; i < 16; i++ {
107 if list&(1<<uint(i)) != 0 {
108 if str == "" {
109 str += "["
110 } else {
111 str += ","
112 }
113
114 if i == REGG-REG_R0 {
115 str += "g"
116 } else {
117 str += fmt.Sprintf("R%d", i)
118 }
119 }
120 }
121
122 str += "]"
123 return str
124 }
125
View as plain text