// license that can be found in the LICENSE file.
TEXT errors(SB),$0
- MOVD.P 300(R2), R3 // ERROR "offset out of range [-255,254]"
- MOVD.P R3, 344(R2) // ERROR "offset out of range [-255,254]"
- VLD1 (R8)(R13), [V2.B16] // ERROR "illegal combination"
- VLD1 8(R9), [V2.B16] // ERROR "illegal combination"
- VST1 [V1.B16], (R8)(R13) // ERROR "illegal combination"
- VST1 [V1.B16], 9(R2) // ERROR "illegal combination"
- VLD1 8(R8)(R13), [V2.B16] // ERROR "illegal combination"
- ADD R1.UXTB<<5, R2, R3 // ERROR "shift amount out of range 0 to 4"
- ADDS R1.UXTX<<7, R2, R3 // ERROR "shift amount out of range 0 to 4"
- VMOV V8.D[2], V12.D[1] // ERROR "register element index out of range 0 to 1"
- VMOV V8.S[4], V12.S[1] // ERROR "register element index out of range 0 to 3"
- VMOV V8.H[8], V12.H[1] // ERROR "register element index out of range 0 to 7"
- VMOV V8.B[16], V12.B[1] // ERROR "register element index out of range 0 to 15"
- VMOV V8.D[0], V12.S[1] // ERROR "operand mismatch"
- VMOV V8.D[0], V12.H[1] // ERROR "operand mismatch"
- VMOV V8.D[0], V12.B[1] // ERROR "operand mismatch"
- VMOV V8.S[0], V12.H[1] // ERROR "operand mismatch"
- VMOV V8.S[0], V12.B[1] // ERROR "operand mismatch"
- VMOV V8.H[0], V12.B[1] // ERROR "operand mismatch"
- VMOV V8.B[16], R3 // ERROR "register element index out of range 0 to 15"
- VMOV V8.H[9], R3 // ERROR "register element index out of range 0 to 7"
- VMOV V8.S[4], R3 // ERROR "register element index out of range 0 to 3"
- VMOV V8.D[2], R3 // ERROR "register element index out of range 0 to 1"
- VDUP V8.B[16], R3.B16 // ERROR "register element index out of range 0 to 15"
- VDUP V8.B[17], R3.B8 // ERROR "register element index out of range 0 to 15"
- VDUP V8.H[9], R3.H4 // ERROR "register element index out of range 0 to 7"
- VDUP V8.H[9], R3.H8 // ERROR "register element index out of range 0 to 7"
- VDUP V8.S[4], R3.S2 // ERROR "register element index out of range 0 to 3"
- VDUP V8.S[4], R3.S4 // ERROR "register element index out of range 0 to 3"
- VDUP V8.D[2], R3.D2 // ERROR "register element index out of range 0 to 1"
- VFMLA V1.D2, V12.D2, V3.S2 // ERROR "operand mismatch"
- VFMLA V1.S2, V12.S2, V3.D2 // ERROR "operand mismatch"
- VFMLA V1.S4, V12.S2, V3.D2 // ERROR "operand mismatch"
- VFMLA V1.H4, V12.H4, V3.D2 // ERROR "operand mismatch"
- VFMLS V1.S2, V12.S2, V3.S4 // ERROR "operand mismatch"
- VFMLS V1.S2, V12.D2, V3.S4 // ERROR "operand mismatch"
- VFMLS V1.S2, V12.S4, V3.D2 // ERROR "operand mismatch"
- VFMLA V1.B8, V12.B8, V3.B8 // ERROR "invalid arrangement"
- VFMLA V1.B16, V12.B16, V3.B16 // ERROR "invalid arrangement"
- VFMLA V1.H4, V12.H4, V3.H4 // ERROR "invalid arrangement"
- VFMLA V1.H8, V12.H8, V3.H8 // ERROR "invalid arrangement"
- VFMLA V1.H4, V12.H4, V3.H4 // ERROR "invalid arrangement"
- VFMLS V1.B8, V12.B8, V3.B8 // ERROR "invalid arrangement"
- VFMLS V1.B16, V12.B16, V3.B16 // ERROR "invalid arrangement"
- VFMLS V1.H4, V12.H4, V3.H4 // ERROR "invalid arrangement"
- VFMLS V1.H8, V12.H8, V3.H8 // ERROR "invalid arrangement"
- VFMLS V1.H4, V12.H4, V3.H4 // ERROR "invalid arrangement"
-
- AND $1, RSP // ERROR "illegal combination"
- ANDS $1, R0, RSP // ERROR "illegal combination"
+ AND $1, RSP // ERROR "illegal combination"
+ ANDS $1, R0, RSP // ERROR "illegal combination"
+ MOVD.P 300(R2), R3 // ERROR "offset out of range [-255,254]"
+ MOVD.P R3, 344(R2) // ERROR "offset out of range [-255,254]"
+ ADDSW R7->32, R14, R13 // ERROR "shift amount out of range 0 to 31"
+ BICW R7@>33, R5, R16 // ERROR "shift amount out of range 0 to 31"
+ ADD R1.UXTB<<5, R2, R3 // ERROR "shift amount out of range 0 to 4"
+ ADDS R1.UXTX<<7, R2, R3 // ERROR "shift amount out of range 0 to 4"
+ VLD1 (R8)(R13), [V2.B16] // ERROR "illegal combination"
+ VLD1 8(R9), [V2.B16] // ERROR "illegal combination"
+ VST1 [V1.B16], (R8)(R13) // ERROR "illegal combination"
+ VST1 [V1.B16], 9(R2) // ERROR "illegal combination"
+ VLD1 8(R8)(R13), [V2.B16] // ERROR "illegal combination"
+ VMOV V8.D[2], V12.D[1] // ERROR "register element index out of range 0 to 1"
+ VMOV V8.S[4], V12.S[1] // ERROR "register element index out of range 0 to 3"
+ VMOV V8.H[8], V12.H[1] // ERROR "register element index out of range 0 to 7"
+ VMOV V8.B[16], V12.B[1] // ERROR "register element index out of range 0 to 15"
+ VMOV V8.D[0], V12.S[1] // ERROR "operand mismatch"
+ VMOV V8.D[0], V12.H[1] // ERROR "operand mismatch"
+ VMOV V8.D[0], V12.B[1] // ERROR "operand mismatch"
+ VMOV V8.S[0], V12.H[1] // ERROR "operand mismatch"
+ VMOV V8.S[0], V12.B[1] // ERROR "operand mismatch"
+ VMOV V8.H[0], V12.B[1] // ERROR "operand mismatch"
+ VMOV V8.B[16], R3 // ERROR "register element index out of range 0 to 15"
+ VMOV V8.H[9], R3 // ERROR "register element index out of range 0 to 7"
+ VMOV V8.S[4], R3 // ERROR "register element index out of range 0 to 3"
+ VMOV V8.D[2], R3 // ERROR "register element index out of range 0 to 1"
+ VDUP V8.B[16], R3.B16 // ERROR "register element index out of range 0 to 15"
+ VDUP V8.B[17], R3.B8 // ERROR "register element index out of range 0 to 15"
+ VDUP V8.H[9], R3.H4 // ERROR "register element index out of range 0 to 7"
+ VDUP V8.H[9], R3.H8 // ERROR "register element index out of range 0 to 7"
+ VDUP V8.S[4], R3.S2 // ERROR "register element index out of range 0 to 3"
+ VDUP V8.S[4], R3.S4 // ERROR "register element index out of range 0 to 3"
+ VDUP V8.D[2], R3.D2 // ERROR "register element index out of range 0 to 1"
+ VFMLA V1.D2, V12.D2, V3.S2 // ERROR "operand mismatch"
+ VFMLA V1.S2, V12.S2, V3.D2 // ERROR "operand mismatch"
+ VFMLA V1.S4, V12.S2, V3.D2 // ERROR "operand mismatch"
+ VFMLA V1.H4, V12.H4, V3.D2 // ERROR "operand mismatch"
+ VFMLS V1.S2, V12.S2, V3.S4 // ERROR "operand mismatch"
+ VFMLS V1.S2, V12.D2, V3.S4 // ERROR "operand mismatch"
+ VFMLS V1.S2, V12.S4, V3.D2 // ERROR "operand mismatch"
+ VFMLA V1.B8, V12.B8, V3.B8 // ERROR "invalid arrangement"
+ VFMLA V1.B16, V12.B16, V3.B16 // ERROR "invalid arrangement"
+ VFMLA V1.H4, V12.H4, V3.H4 // ERROR "invalid arrangement"
+ VFMLA V1.H8, V12.H8, V3.H8 // ERROR "invalid arrangement"
+ VFMLA V1.H4, V12.H4, V3.H4 // ERROR "invalid arrangement"
+ VFMLS V1.B8, V12.B8, V3.B8 // ERROR "invalid arrangement"
+ VFMLS V1.B16, V12.B16, V3.B16 // ERROR "invalid arrangement"
+ VFMLS V1.H4, V12.H4, V3.H4 // ERROR "invalid arrangement"
+ VFMLS V1.H8, V12.H8, V3.H8 // ERROR "invalid arrangement"
+ VFMLS V1.H4, V12.H4, V3.H4 // ERROR "invalid arrangement"
+ VST1.P [V4.S4,V5.S4], 48(R1) // ERROR "invalid post-increment offset"
+ VST1.P [V4.S4], 8(R1) // ERROR "invalid post-increment offset"
+ VLD1.P 32(R1), [V8.S4, V9.S4, V10.S4] // ERROR "invalid post-increment offset"
+ VLD1.P 48(R1), [V7.S4, V8.S4, V9.S4, V10.S4] // ERROR "invalid post-increment offset"
RET
}
func rconv(r int) string {
+ ext := (r >> 5) & 7
if r == REGG {
return "g"
}
case r == REG_PSTL3STRM:
return "PSTL3STRM"
case REG_UXTB <= r && r < REG_UXTH:
- if (r>>5)&7 != 0 {
- return fmt.Sprintf("R%d.UXTB<<%d", r&31, (r>>5)&7)
+ if ext != 0 {
+ return fmt.Sprintf("%s.UXTB<<%d", regname(r), ext)
} else {
- return fmt.Sprintf("R%d.UXTB", r&31)
+ return fmt.Sprintf("%s.UXTB", regname(r))
}
case REG_UXTH <= r && r < REG_UXTW:
- if (r>>5)&7 != 0 {
- return fmt.Sprintf("R%d.UXTH<<%d", r&31, (r>>5)&7)
+ if ext != 0 {
+ return fmt.Sprintf("%s.UXTH<<%d", regname(r), ext)
} else {
- return fmt.Sprintf("R%d.UXTH", r&31)
+ return fmt.Sprintf("%s.UXTH", regname(r))
}
case REG_UXTW <= r && r < REG_UXTX:
- if (r>>5)&7 != 0 {
- return fmt.Sprintf("R%d.UXTW<<%d", r&31, (r>>5)&7)
+ if ext != 0 {
+ return fmt.Sprintf("%s.UXTW<<%d", regname(r), ext)
} else {
- return fmt.Sprintf("R%d.UXTW", r&31)
+ return fmt.Sprintf("%s.UXTW", regname(r))
}
case REG_UXTX <= r && r < REG_SXTB:
- if (r>>5)&7 != 0 {
- return fmt.Sprintf("R%d.UXTX<<%d", r&31, (r>>5)&7)
+ if ext != 0 {
+ return fmt.Sprintf("%s.UXTX<<%d", regname(r), ext)
} else {
- return fmt.Sprintf("R%d.UXTX", r&31)
+ return fmt.Sprintf("%s.UXTX", regname(r))
}
case REG_SXTB <= r && r < REG_SXTH:
- if (r>>5)&7 != 0 {
- return fmt.Sprintf("R%d.SXTB<<%d", r&31, (r>>5)&7)
+ if ext != 0 {
+ return fmt.Sprintf("%s.SXTB<<%d", regname(r), ext)
} else {
- return fmt.Sprintf("R%d.SXTB", r&31)
+ return fmt.Sprintf("%s.SXTB", regname(r))
}
case REG_SXTH <= r && r < REG_SXTW:
- if (r>>5)&7 != 0 {
- return fmt.Sprintf("R%d.SXTH<<%d", r&31, (r>>5)&7)
+ if ext != 0 {
+ return fmt.Sprintf("%s.SXTH<<%d", regname(r), ext)
} else {
- return fmt.Sprintf("R%d.SXTH", r&31)
+ return fmt.Sprintf("%s.SXTH", regname(r))
}
case REG_SXTW <= r && r < REG_SXTX:
- if (r>>5)&7 != 0 {
- return fmt.Sprintf("R%d.SXTW<<%d", r&31, (r>>5)&7)
+ if ext != 0 {
+ return fmt.Sprintf("%s.SXTW<<%d", regname(r), ext)
} else {
- return fmt.Sprintf("R%d.SXTW", r&31)
+ return fmt.Sprintf("%s.SXTW", regname(r))
}
case REG_SXTX <= r && r < REG_SPECIAL:
- if (r>>5)&7 != 0 {
- return fmt.Sprintf("R%d.SXTX<<%d", r&31, (r>>5)&7)
+ if ext != 0 {
+ return fmt.Sprintf("%s.SXTX<<%d", regname(r), ext)
} else {
- return fmt.Sprintf("R%d.SXTX", r&31)
+ return fmt.Sprintf("%s.SXTX", regname(r))
}
case REG_ARNG <= r && r < REG_ELEM:
return fmt.Sprintf("V%d.%s", r&31, arrange((r>>5)&15))
str += "]"
return str
}
+
+func regname(r int) string {
+ if r&31 == 31 {
+ return "ZR"
+ }
+ return fmt.Sprintf("R%d", r&31)
+}