codekingpro/portable-devtools
114k
1// asmcheck2 3// Copyright 2018 The Go Authors. All rights reserved.4// Use of this source code is governed by a BSD-style5// license that can be found in the LICENSE file.6 7package codegen8 9var x [2]bool10var x8 [2]uint811var x16 [2]uint1612var x32 [2]uint3213var x64 [2]uint6414 15func compMem1() int {16 // amd64:`CMPB command-line-arguments.x\+1\(SB\), [$]0`17 if x[1] {18 return 119 }20 // amd64:`CMPB command-line-arguments.x8\+1\(SB\), [$]7`21 if x8[1] == 7 {22 return 123 }24 // amd64:`CMPW command-line-arguments.x16\+2\(SB\), [$]7`25 if x16[1] == 7 {26 return 127 }28 // amd64:`CMPL command-line-arguments.x32\+4\(SB\), [$]7`29 if x32[1] == 7 {30 return 131 }32 // amd64:`CMPQ command-line-arguments.x64\+8\(SB\), [$]7`33 if x64[1] == 7 {34 return 135 }36 return 037}38 39type T struct {40 x bool41 x8 uint842 x16 uint1643 x32 uint3244 x64 uint6445 a [2]int // force it passed in memory46}47 48func compMem2(t T) int {49 // amd64:`CMPB .*\(SP\), [$]0`50 if t.x {51 return 152 }53 // amd64:`CMPB .*\(SP\), [$]7`54 if t.x8 == 7 {55 return 156 }57 // amd64:`CMPW .*\(SP\), [$]7`58 if t.x16 == 7 {59 return 160 }61 // amd64:`CMPL .*\(SP\), [$]7`62 if t.x32 == 7 {63 return 164 }65 // amd64:`CMPQ .*\(SP\), [$]7`66 if t.x64 == 7 {67 return 168 }69 return 070}71 72func compMem3(x, y *int) (int, bool) {73 // We can do comparisons of a register with memory even if74 // the register is used subsequently.75 r := *x76 // amd64:`CMPQ \(`77 // 386:`CMPL \(`78 return r, r < *y79}80 81// The following functions test that indexed load/store operations get generated.82 83func idxInt8(x, y []int8, i int) {84 var t int885 // amd64: `MOVBL[SZ]X 1\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*1\), [A-Z]+[0-9]*`86 // 386: `MOVBL[SZ]X 1\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*1\), [A-Z]+[0-9]*`87 t = x[i+1]88 // amd64: `MOVB [A-Z]+[0-9]*, 1\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*1\)`89 // 386: `MOVB [A-Z]+[0-9]*, 1\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*1\)`90 y[i+1] = t91 // amd64: `MOVB [$]77, 1\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*1\)`92 // 386: `MOVB [$]77, 1\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*1\)`93 x[i+1] = 7794}95 96func idxInt16(x, y []int16, i int) {97 var t int1698 // amd64: `MOVWL[SZ]X 2\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*2\), [A-Z]+[0-9]*`99 // 386: `MOVWL[SZ]X 2\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*2\), [A-Z]+[0-9]*`100 t = x[i+1]101 // amd64: `MOVW [A-Z]+[0-9]*, 2\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*2\)`102 // 386: `MOVW [A-Z]+[0-9]*, 2\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*2\)`103 y[i+1] = t104 // amd64: `MOVWL[SZ]X 2\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[12]\), [A-Z]+[0-9]*`105 // 386: `MOVWL[SZ]X 2\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[12]\), [A-Z]+[0-9]*`106 t = x[16*i+1]107 // amd64: `MOVW [A-Z]+[0-9]*, 2\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[12]\)`108 // 386: `MOVW [A-Z]+[0-9]*, 2\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[12]\)`109 y[16*i+1] = t110 // amd64: `MOVW [$]77, 2\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*2\)`111 // 386: `MOVW [$]77, 2\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*2\)`112 x[i+1] = 77113 // amd64: `MOVW [$]77, 2\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[12]\)`114 // 386: `MOVW [$]77, 2\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[12]\)`115 x[16*i+1] = 77116}117 118func idxInt32(x, y []int32, i int) {119 var t int32120 // amd64: `MOVL 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*`121 // 386: `MOVL 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*`122 t = x[i+1]123 // amd64: `MOVL [A-Z]+[0-9]*, 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\)`124 // 386: `MOVL [A-Z]+[0-9]*, 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\)`125 y[i+1] = t126 // amd64: `MOVL 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*`127 t = x[2*i+1]128 // amd64: `MOVL [A-Z]+[0-9]*, 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\)`129 y[2*i+1] = t130 // amd64: `MOVL 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[14]\), [A-Z]+[0-9]*`131 // 386: `MOVL 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[14]\), [A-Z]+[0-9]*`132 t = x[16*i+1]133 // amd64: `MOVL [A-Z]+[0-9]*, 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[14]\)`134 // 386: `MOVL [A-Z]+[0-9]*, 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[14]\)`135 y[16*i+1] = t136 // amd64: `MOVL [$]77, 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\)`137 // 386: `MOVL [$]77, 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\)`138 x[i+1] = 77139 // amd64: `MOVL [$]77, 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[14]\)`140 // 386: `MOVL [$]77, 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[14]\)`141 x[16*i+1] = 77142}143 144func idxInt64(x, y []int64, i int) {145 var t int64146 // amd64: `MOVQ 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*`147 t = x[i+1]148 // amd64: `MOVQ [A-Z]+[0-9]*, 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\)`149 y[i+1] = t150 // amd64: `MOVQ 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[18]\), [A-Z]+[0-9]*`151 t = x[16*i+1]152 // amd64: `MOVQ [A-Z]+[0-9]*, 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[18]\)`153 y[16*i+1] = t154 // amd64: `MOVQ [$]77, 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\)`155 x[i+1] = 77156 // amd64: `MOVQ [$]77, 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[18]\)`157 x[16*i+1] = 77158}159 160func idxFloat32(x, y []float32, i int) {161 var t float32162 // amd64: `MOVSS 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), X[0-9]+`163 // 386/sse2: `MOVSS 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), X[0-9]+`164 // arm64: `FMOVS \(R[0-9]*\)\(R[0-9]*<<2\), F[0-9]+`165 t = x[i+1]166 // amd64: `MOVSS X[0-9]+, 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\)`167 // 386/sse2: `MOVSS X[0-9]+, 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\)`168 // arm64: `FMOVS F[0-9]+, \(R[0-9]*\)\(R[0-9]*<<2\)`169 y[i+1] = t170 // amd64: `MOVSS 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[14]\), X[0-9]+`171 // 386/sse2: `MOVSS 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[14]\), X[0-9]+`172 t = x[16*i+1]173 // amd64: `MOVSS X[0-9]+, 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[14]\)`174 // 386/sse2: `MOVSS X[0-9]+, 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[14]\)`175 y[16*i+1] = t176}177 178func idxFloat64(x, y []float64, i int) {179 var t float64180 // amd64: `MOVSD 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), X[0-9]+`181 // 386/sse2: `MOVSD 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), X[0-9]+`182 // arm64: `FMOVD \(R[0-9]*\)\(R[0-9]*<<3\), F[0-9]+`183 t = x[i+1]184 // amd64: `MOVSD X[0-9]+, 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\)`185 // 386/sse2: `MOVSD X[0-9]+, 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\)`186 // arm64: `FMOVD F[0-9]+, \(R[0-9]*\)\(R[0-9]*<<3\)`187 y[i+1] = t188 // amd64: `MOVSD 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[18]\), X[0-9]+`189 // 386/sse2: `MOVSD 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[18]\), X[0-9]+`190 t = x[16*i+1]191 // amd64: `MOVSD X[0-9]+, 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[18]\)`192 // 386/sse2: `MOVSD X[0-9]+, 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[18]\)`193 y[16*i+1] = t194}195 196func idxLoadPlusOp32(x []int32, i int) int32 {197 s := x[0]198 // 386: `ADDL 4\([A-Z]+\)\([A-Z]+\*4\), [A-Z]+`199 // amd64: `ADDL 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*`200 s += x[i+1]201 // 386: `SUBL 8\([A-Z]+\)\([A-Z]+\*4\), [A-Z]+`202 // amd64: `SUBL 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*`203 s -= x[i+2]204 // 386: `IMULL 12\([A-Z]+\)\([A-Z]+\*4\), [A-Z]+`205 s *= x[i+3]206 // 386: `ANDL 16\([A-Z]+\)\([A-Z]+\*4\), [A-Z]+`207 // amd64: `ANDL 16\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*`208 s &= x[i+4]209 // 386: `ORL 20\([A-Z]+\)\([A-Z]+\*4\), [A-Z]+`210 // amd64: `ORL 20\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*`211 s |= x[i+5]212 // 386: `XORL 24\([A-Z]+\)\([A-Z]+\*4\), [A-Z]+`213 // amd64: `XORL 24\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*`214 s ^= x[i+6]215 return s216}217 218func idxLoadPlusOp64(x []int64, i int) int64 {219 s := x[0]220 // amd64: `ADDQ 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*`221 s += x[i+1]222 // amd64: `SUBQ 16\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*`223 s -= x[i+2]224 // amd64: `ANDQ 24\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*`225 s &= x[i+3]226 // amd64: `ORQ 32\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*`227 s |= x[i+4]228 // amd64: `XORQ 40\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*`229 s ^= x[i+5]230 return s231}232 233func idxStorePlusOp32(x []int32, i int, v int32) {234 // 386: `ADDL [A-Z]+, 4\([A-Z]+\)\([A-Z]+\*4\)`235 // amd64: `ADDL [A-Z]+[0-9]*, 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\)`236 x[i+1] += v237 // 386: `SUBL [A-Z]+, 8\([A-Z]+\)\([A-Z]+\*4\)`238 // amd64: `SUBL [A-Z]+[0-9]*, 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\)`239 x[i+2] -= v240 // 386: `ANDL [A-Z]+, 12\([A-Z]+\)\([A-Z]+\*4\)`241 // amd64: `ANDL [A-Z]+[0-9]*, 12\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\)`242 x[i+3] &= v243 // 386: `ORL [A-Z]+, 16\([A-Z]+\)\([A-Z]+\*4\)`244 // amd64: `ORL [A-Z]+[0-9]*, 16\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\)`245 x[i+4] |= v246 // 386: `XORL [A-Z]+, 20\([A-Z]+\)\([A-Z]+\*4\)`247 // amd64: `XORL [A-Z]+[0-9]*, 20\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\)`248 x[i+5] ^= v249 250 // 386: `ADDL [$]77, 24\([A-Z]+\)\([A-Z]+\*4\)`251 // amd64: `ADDL [$]77, 24\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\)`252 x[i+6] += 77253 // 386: `ANDL [$]77, 28\([A-Z]+\)\([A-Z]+\*4\)`254 // amd64: `ANDL [$]77, 28\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\)`255 x[i+7] &= 77256 // 386: `ORL [$]77, 32\([A-Z]+\)\([A-Z]+\*4\)`257 // amd64: `ORL [$]77, 32\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\)`258 x[i+8] |= 77259 // 386: `XORL [$]77, 36\([A-Z]+\)\([A-Z]+\*4\)`260 // amd64: `XORL [$]77, 36\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\)`261 x[i+9] ^= 77262}263 264func idxStorePlusOp64(x []int64, i int, v int64) {265 // amd64: `ADDQ [A-Z]+[0-9]*, 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\)`266 x[i+1] += v267 // amd64: `SUBQ [A-Z]+[0-9]*, 16\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\)`268 x[i+2] -= v269 // amd64: `ANDQ [A-Z]+[0-9]*, 24\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\)`270 x[i+3] &= v271 // amd64: `ORQ [A-Z]+[0-9]*, 32\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\)`272 x[i+4] |= v273 // amd64: `XORQ [A-Z]+[0-9]*, 40\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\)`274 x[i+5] ^= v275 276 // amd64: `ADDQ [$]77, 48\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\)`277 x[i+6] += 77278 // amd64: `ANDQ [$]77, 56\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\)`279 x[i+7] &= 77280 // amd64: `ORQ [$]77, 64\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\)`281 x[i+8] |= 77282 // amd64: `XORQ [$]77, 72\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\)`283 x[i+9] ^= 77284}285 286func idxCompare(i int) int {287 // amd64: `MOVBLZX 1\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*1\), [A-Z]+[0-9]*`288 if x8[i+1] < x8[0] {289 return 0290 }291 // amd64: `MOVWLZX 2\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*2\), [A-Z]+[0-9]*`292 if x16[i+1] < x16[0] {293 return 0294 }295 // amd64: `MOVWLZX 2\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[12]\), [A-Z]+[0-9]*`296 if x16[16*i+1] < x16[0] {297 return 0298 }299 // amd64: `MOVL 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*`300 if x32[i+1] < x32[0] {301 return 0302 }303 // amd64: `MOVL 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[14]\), [A-Z]+[0-9]*`304 if x32[16*i+1] < x32[0] {305 return 0306 }307 // amd64: `MOVQ 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*`308 if x64[i+1] < x64[0] {309 return 0310 }311 // amd64: `MOVQ 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[18]\), [A-Z]+[0-9]*`312 if x64[16*i+1] < x64[0] {313 return 0314 }315 // amd64: `MOVBLZX 2\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*1\), [A-Z]+[0-9]*`316 if x8[i+2] < 77 {317 return 0318 }319 // amd64: `MOVWLZX 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*2\), [A-Z]+[0-9]*`320 if x16[i+2] < 77 {321 return 0322 }323 // amd64: `MOVWLZX 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[12]\), [A-Z]+[0-9]*`324 if x16[16*i+2] < 77 {325 return 0326 }327 // amd64: `MOVL 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*`328 if x32[i+2] < 77 {329 return 0330 }331 // amd64: `MOVL 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[14]\), [A-Z]+[0-9]*`332 if x32[16*i+2] < 77 {333 return 0334 }335 // amd64: `MOVQ 16\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*`336 if x64[i+2] < 77 {337 return 0338 }339 // amd64: `MOVQ 16\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*[18]\), [A-Z]+[0-9]*`340 if x64[16*i+2] < 77 {341 return 0342 }343 return 1344}345 346func idxFloatOps(a []float64, b []float32, i int) (float64, float32) {347 c := float64(7)348 // amd64: `ADDSD 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), X[0-9]+`349 c += a[i+1]350 // amd64: `SUBSD 16\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), X[0-9]+`351 c -= a[i+2]352 // amd64: `MULSD 24\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), X[0-9]+`353 c *= a[i+3]354 // amd64: `DIVSD 32\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), X[0-9]+`355 c /= a[i+4]356 357 d := float32(8)358 // amd64: `ADDSS 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), X[0-9]+`359 d += b[i+1]360 // amd64: `SUBSS 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), X[0-9]+`361 d -= b[i+2]362 // amd64: `MULSS 12\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), X[0-9]+`363 d *= b[i+3]364 // amd64: `DIVSS 16\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), X[0-9]+`365 d /= b[i+4]366 return c, d367}368 369func storeTest(a []bool, v int, i int) {370 // amd64: `BTL \$0,`,`SETCS 4\([A-Z]+[0-9]*\)`371 a[4] = v&1 != 0372 // amd64: `BTL \$1,`,`SETCS 3\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*1\)`373 a[3+i] = v&2 != 0374}375 376func bitOps(p *[12]uint64) {377 // amd64: `ORQ \$8, \(AX\)`378 p[0] |= 8379 // amd64: `ORQ \$1073741824, 8\(AX\)`380 p[1] |= 1 << 30381 // amd64: `BTSQ \$31, 16\(AX\)`382 p[2] |= 1 << 31383 // amd64: `BTSQ \$63, 24\(AX\)`384 p[3] |= 1 << 63385 386 // amd64: `ANDQ \$-9, 32\(AX\)`387 p[4] &^= 8388 // amd64: `ANDQ \$-1073741825, 40\(AX\)`389 p[5] &^= 1 << 30390 // amd64: `BTRQ \$31, 48\(AX\)`391 p[6] &^= 1 << 31392 // amd64: `BTRQ \$63, 56\(AX\)`393 p[7] &^= 1 << 63394 395 // amd64: `XORQ \$8, 64\(AX\)`396 p[8] ^= 8397 // amd64: `XORQ \$1073741824, 72\(AX\)`398 p[9] ^= 1 << 30399 // amd64: `BTCQ \$31, 80\(AX\)`400 p[10] ^= 1 << 31401 // amd64: `BTCQ \$63, 88\(AX\)`402 p[11] ^= 1 << 63403}404 