{"record":{"id":"e0ba603ca86d94d5","repo":"golang/go","slug":"loong64-extension-invalid-lasx-arrangement-type","errorCode":null,"errorMessage":"Loong64 extension: invalid LASX arrangement type: {ext}","messagePattern":"Loong64 extension: invalid LASX arrangement type: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cmd/asm/internal/arch/loong64.go","lineNumber":115,"sourceCode":"\t\t}\n\n\t\ta.Reg = loong64.REG_ELEM\n\t\ta.Reg += ((simdReg & loong64.EXT_REG_MASK) << loong64.EXT_REG_SHIFT)\n\t\ta.Reg += ((arngType & loong64.EXT_TYPE_MASK) << loong64.EXT_TYPE_SHIFT)\n\t\ta.Reg += ((simdType & loong64.EXT_SIMDTYPE_MASK) << loong64.EXT_SIMDTYPE_SHIFT)\n\t\ta.Index = num\n\t} else {\n\t\tswitch simdType {\n\t\tcase loong64.LSX:\n\t\t\tarngType, ok = loong64LsxArngExtMap[ext]\n\t\t\tif !ok {\n\t\t\t\treturn errors.New(\"Loong64 extension: invalid LSX arrangement type: \" + ext)\n\t\t\t}\n\n\t\tcase loong64.LASX:\n\t\t\tarngType, ok = loong64LasxArngExtMap[ext]\n\t\t\tif !ok {\n\t\t\t\treturn errors.New(\"Loong64 extension: invalid LASX arrangement type: \" + ext)\n\t\t\t}\n\t\t}\n\n\t\ta.Reg = loong64.REG_ARNG\n\t\ta.Reg += ((simdReg & loong64.EXT_REG_MASK) << loong64.EXT_REG_SHIFT)\n\t\ta.Reg += ((arngType & loong64.EXT_TYPE_MASK) << loong64.EXT_TYPE_SHIFT)\n\t\ta.Reg += ((simdType & loong64.EXT_SIMDTYPE_MASK) << loong64.EXT_SIMDTYPE_SHIFT)\n\t}\n\n\treturn nil\n}\n\nfunc loong64RegisterNumber(name string, n int16) (int16, bool) {\n\tswitch name {\n\tcase \"F\":\n\t\tif 0 <= n && n <= 31 {\n\t\t\treturn loong64.REG_F0 + n, true\n\t\t}","sourceCodeStart":97,"sourceCodeEnd":133,"githubUrl":"https://github.com/golang/go/blob/b6b368adc57c96c3151d224d172029f233ead2c3/src/cmd/asm/internal/arch/loong64.go#L97-L133","documentation":"Thrown by Loong64RegisterExtension in the non-index (arrangement) branch when simdType is LASX (register is X0-X31) and `ext` is not a key in loong64LasxArngExtMap. LASX arrangement suffixes are restricted to B32, H16, W8, V4, and Q2, describing a 256-bit LASX vector's lane layout.","triggerScenarios":"Calling Loong64RegisterExtension with isIndex==false, an X-register (LASX), and an arrangement suffix not equal to B32/H16/W8/V4/Q2. In assembly this is an operand like `X0.B16` or `X0.H8` where the suffix does not match a 256-bit LASX arrangement.","commonSituations":"Using an LSX (128-bit) arrangement suffix (B16, H8, W4, V2) on an LASX X-register; reusing a V-register suffix verbatim; typos in lane count.","solutions":["Use one of the LASX arrangements: B32, H16, W8, V4, or Q2.","If you intended a 128-bit arrangement, switch the register to an LSX V-register (V0-V31).","Confirm the lane width/count against the 256-bit LASX register size (32 bytes total)."],"exampleFix":"// before (LSX suffix on LASX register)\nXVADD X0.B16, X1, X2\n// after (correct LASX arrangement)\nXVADD X0.B32, X1, X2","handlingStrategy":"validation","validationCode":"var validLasxArng = map[string]bool{\"B32\":true,\"H16\":true,\"W8\":true,\"V4\":true,\"Q2\":true}\nfunc isValidLasxArrangement(ext string) bool { return validLasxArng[ext] }","typeGuard":"func isLasxArrangement(ext string) bool {\n    switch ext { case \"B32\",\"H16\",\"W8\",\"V4\",\"Q2\": return true }\n    return false\n}","tryCatchPattern":null,"preventionTips":["Remember LASX is 256-bit: B32/H16/W8/V4/Q2 are the only valid full-vector arrangements.","Do not reuse LSX (128-bit) suffixes on X-registers.","Cross-check assembly mnemonics with the LoongArch ISA manual when porting."],"tags":["loong64","assembly","simd","lasx","assembler"],"backgroundTag":null,"analyzedSha":"b6b368adc57c96c3151d224d172029f233ead2c3","analyzedAt":"2026-08-12T00:22:02.250Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}