1
2
3
4
5 package main
6
7 import "fmt"
8
9
10 type ArchInfo struct {
11 Arch string
12 ArchUpper string
13 ObjArch string
14 RegInfoKeys []string
15 RegInfoSet map[string]bool
16 RegInfoParams string
17 GeneratedHeader string
18 Arrangements []string
19 }
20
21 var amd64RegInfoKeys = []string{
22 "v11",
23 "v21",
24 "v2k",
25 "v2kv",
26 "v2kk",
27 "vkv",
28 "v31",
29 "v3kv",
30 "v11Imm8",
31 "vkvImm8",
32 "v21Imm8",
33 "v2kImm8",
34 "v2kkImm8",
35 "v31ResultInArg0",
36 "v3kvResultInArg0",
37 "vfpv",
38 "vfpkv",
39 "vgpvImm8",
40 "vgpvImm",
41 "vgpImm8",
42 "vgpImm",
43 "v2kvImm8",
44 "vkvload",
45 "v21load",
46 "v31loadResultInArg0",
47 "v3kvloadResultInArg0",
48 "v2kvload",
49 "v2kload",
50 "v11load",
51 "v11loadImm8",
52 "vkvloadImm8",
53 "v21loadImm8",
54 "v2kloadImm8",
55 "v2kkloadImm8",
56 "v2kvloadImm8",
57 "v31ResultInArg0Imm8",
58 "v31loadResultInArg0Imm8",
59 "v21ResultInArg0",
60 "v21ResultInArg0Imm8",
61 "v31x0AtIn2ResultInArg0",
62 "v2kvResultInArg0",
63 }
64
65 var arm64RegInfoKeys = []string{
66 "v11",
67 "v11Imm",
68 "v11ImmIn1",
69 "v11Scalar",
70 "v11ScalarImmIn1",
71 "v21",
72 "v21Imm",
73 "v31ResultInArg0",
74 "vgpImmIn1",
75 "vgpvResultInArg0ImmOutIn0",
76 "vfpvResultInArg0ImmOutIn1",
77 "v11Long",
78 "v11Narrow",
79 "v11ImmNarrow",
80 "v11ImmLong",
81 "v21Long",
82 "v11Long2",
83 "v21Narrow2",
84 "v21ImmNarrow2",
85 "v11ImmLong2",
86 "v21Long2",
87 "v21List",
88 "v31ResultInArg0List",
89 }
90
91 var amd64RegInfoSet = map[string]bool{
92 "v11": true, "v21": true, "v2k": true, "v2kv": true, "v2kk": true, "vkv": true, "v31": true, "v3kv": true, "vgpv": true, "vgp": true, "vfpv": true, "vfpkv": true,
93 "w11": true, "w21": true, "w2k": true, "w2kw": true, "w2kk": true, "wkw": true, "w31": true, "w3kw": true, "wgpw": true, "wgp": true, "wfpw": true, "wfpkw": true,
94 "wkwload": true, "v21load": true, "v31load": true, "v11load": true, "w21load": true, "w31load": true, "w2kload": true, "w2kwload": true, "w11load": true,
95 "w3kwload": true, "w2kkload": true, "v31x0AtIn2": true,
96 }
97
98 var arm64RegInfoSet = map[string]bool{
99 "v11": true,
100 "v21": true,
101 "v21Imm": true,
102 "v31": true,
103 "vgp": true,
104 "vgpv": true,
105 "vfpv": true,
106 "v11ImmIn1": true,
107 "v11Long": true,
108 "v11Narrow": true,
109 "v11ImmNarrow": true,
110 "v11ImmLong": true,
111 "v21Long": true,
112 "v11Long2": true,
113 "v21Narrow2": true,
114 "v21ImmNarrow2": true,
115 "v11ImmLong2": true,
116 "v21Long2": true,
117 "v21List": true,
118 "v31ResultInArg0List": true,
119 }
120
121
122
123 var arm64Arrangements = []string{
124 "8B", "16B", "1D", "4H", "8H", "2S", "4S", "2D", "1Q", "B", "H", "S", "D",
125 }
126
127 const amd64RegInfoParams = "v11, v21, v2k, vkv, v2kv, v2kk, v31, v3kv, vgpv, vgp, vfpv, vfpkv, w11, w21, w2k, wkw, w2kw, w2kk, w31, w3kw, wgpw, wgp, wfpw, wfpkw,\n\twkwload, v21load, v31load, v11load, w21load, w31load, w2kload, w2kwload, w11load, w3kwload, w2kkload, v31x0AtIn2 regInfo"
128
129 const arm64RegInfoParams = "v11, v21, v31, vgp, vgpv, vfpv regInfo"
130
131 const amd64GeneratedHeader = `// Code generated by 'simdgen -o godefs -goroot $GOROOT -arch amd64 -xedPath $XED_PATH go_amd64.yaml types.yaml categories.yaml'; DO NOT EDIT.
132 `
133
134 const arm64GeneratedHeader = `// Code generated by 'simdgen -o godefs -goroot $GOROOT -arch arm64 -arm64Path $ARM64_ISA_PATH go_arm64.yaml types.yaml categories.yaml'; DO NOT EDIT.
135 `
136
137
138 func GetArchInfo(arch string) (ArchInfo, error) {
139 switch arch {
140 case "amd64":
141 return ArchInfo{
142 Arch: "amd64",
143 ArchUpper: "AMD64",
144 ObjArch: "x86",
145 RegInfoKeys: amd64RegInfoKeys,
146 RegInfoSet: amd64RegInfoSet,
147 RegInfoParams: amd64RegInfoParams,
148 GeneratedHeader: amd64GeneratedHeader,
149 }, nil
150 case "arm64":
151 return ArchInfo{
152 Arch: "arm64",
153 ArchUpper: "ARM64",
154 ObjArch: "arm64",
155 RegInfoKeys: arm64RegInfoKeys,
156 RegInfoSet: arm64RegInfoSet,
157 RegInfoParams: arm64RegInfoParams,
158 GeneratedHeader: arm64GeneratedHeader,
159 Arrangements: arm64Arrangements,
160 }, nil
161 default:
162 return ArchInfo{}, fmt.Errorf("unsupported architecture: %s", arch)
163 }
164 }
165
166
167 func CurrentArch() ArchInfo {
168 info, err := GetArchInfo(*FlagArch)
169 if err != nil {
170 panic(err)
171 }
172 return info
173 }
174
View as plain text