// Copyright 2026 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package loong64

import (
	"cmd/internal/obj"
)

//go:generate go run ../stringer.go -i $GOFILE -o anames.go -p loong64
const (
	AABSD = obj.ABaseLoong64 + obj.A_ARCHSPECIFIC + iota
	AABSF
	AADD
	AADDD
	AADDF

	AADDW
	AAND
	ABEQ
	ABGEZ
	ABLEZ
	ABGTZ
	ABLTZ
	ABFPF
	ABFPT

	ABNE
	ABREAK

	ACMPEQD
	ACMPEQF

	ACMPGED // ACMPGED -> fcmp.sle.d
	ACMPGEF // ACMPGEF -> fcmp.sle.s
	ACMPGTD // ACMPGTD -> fcmp.slt.d
	ACMPGTF // ACMPGTF -> fcmp.slt.s

	ALU12IW
	ALU32ID
	ALU52ID
	APCALAU12I
	APCADDU12I
	AJIRL
	ABGE
	ABLT
	ABLTU
	ABGEU

	ADIV
	ADIVD
	ADIVF
	ADIVU
	ADIVW
	ADIVWU

	ALUI

	AMOVB
	AMOVBU

	AMOVD
	AMOVDF
	AMOVDW
	AMOVF
	AMOVFD
	AMOVFW

	AMOVH
	AMOVHU
	AMOVW

	AMOVWD
	AMOVWF

	AMUL
	AMULD
	AMULF
	AMULH
	AMULHU
	AMULW
	ANEGD
	ANEGF

	ANEGW
	ANEGV

	ANOOP // hardware nop
	ANOR
	AOR
	AREM
	AREMW
	AREMU
	AREMWU

	ARFE

	ASGT
	ASGTU

	ASLL
	ASQRTD
	ASQRTF
	ASRA
	ASRL
	AROTR
	ASUB
	ASUBD
	ASUBF

	ASUBW
	ADBAR
	ASYSCALL

	ATEQ
	ATNE

	AWORD

	AXOR

	AMASKEQZ
	AMASKNEZ

	// 64-bit
	AMOVV

	ASLLV
	ASRAV
	ASRLV
	AROTRV
	ADIVV
	ADIVVU

	AREMV
	AREMVU

	AMULV
	AMULVU
	AMULHV
	AMULHVU
	AADDV
	AADDVU
	ASUBV
	ASUBVU

	// 64-bit FP
	ATRUNCFV
	ATRUNCDV
	ATRUNCFW
	ATRUNCDW

	AMOVWU
	AMOVFV
	AMOVDV
	AMOVVF
	AMOVVD

	// 2.2.1.2
	AADDV16

	// 2.2.1.3
	AALSLW
	AALSLWU
	AALSLV

	// 2.2.1.8
	AORN
	AANDN

	// 2.2.1.12
	AMULWVW
	AMULWVWU

	// 2.2.7. Atomic Memory Access Instructions
	AAMSWAPB
	AAMSWAPH
	AAMSWAPW
	AAMSWAPV
	AAMCASB
	AAMCASH
	AAMCASW
	AAMCASV
	AAMADDW
	AAMADDV
	AAMANDW
	AAMANDV
	AAMORW
	AAMORV
	AAMXORW
	AAMXORV
	AAMMAXW
	AAMMAXV
	AAMMINW
	AAMMINV
	AAMMAXWU
	AAMMAXVU
	AAMMINWU
	AAMMINVU
	AAMSWAPDBB
	AAMSWAPDBH
	AAMSWAPDBW
	AAMSWAPDBV
	AAMCASDBB
	AAMCASDBH
	AAMCASDBW
	AAMCASDBV
	AAMADDDBW
	AAMADDDBV
	AAMANDDBW
	AAMANDDBV
	AAMORDBW
	AAMORDBV
	AAMXORDBW
	AAMXORDBV
	AAMMAXDBW
	AAMMAXDBV
	AAMMINDBW
	AAMMINDBV
	AAMMAXDBWU
	AAMMAXDBVU
	AAMMINDBWU
	AAMMINDBVU
	ALL
	ALLW
	ALLV
	ASC
	ASCW
	ASCV
	ASCQ
	ALLACQW
	ALLACQV
	ASCRELW
	ASCRELV

	// 2.2.3.1
	AEXTWB
	AEXTWH

	// 2.2.3.2
	ACLOW
	ACLOV
	ACLZW
	ACLZV
	ACTOW
	ACTOV
	ACTZW
	ACTZV

	// 2.2.3.4
	AREVBV
	AREVB2W
	AREVB4H
	AREVB2H

	// 2.2.3.5
	AREVH2W
	AREVHV

	// 2.2.3.6
	ABITREV4B
	ABITREV8B

	// 2.2.3.7
	ABITREVW
	ABITREVV

	// 2.2.3.8
	ABSTRINSW
	ABSTRINSV

	// 2.2.3.9
	ABSTRPICKW
	ABSTRPICKV

	// 2.2.5.3
	AMOVWP
	AMOVVP

	// 2.2.5.4. Prefetch Instructions
	APRELD
	APRELDX

	// 2.2.9. CRC Check Instructions
	ACRCWBW
	ACRCWHW
	ACRCWWW
	ACRCWVW
	ACRCCWBW
	ACRCCWHW
	ACRCCWWW
	ACRCCWVW

	// 2.2.10. Other Miscellaneous Instructions
	ARDTIMELW
	ARDTIMEHW
	ARDTIMED
	ACPUCFG

	// 3.2.1.2
	AFMADDF
	AFMADDD
	AFMSUBF
	AFMSUBD
	AFNMADDF
	AFNMADDD
	AFNMSUBF
	AFNMSUBD

	// 3.2.1.3
	AFMINF
	AFMIND
	AFMAXF
	AFMAXD

	// 3.2.1.4
	AFMAXAF
	AFMAXAD
	AFMINAF
	AFMINAD

	// 3.2.1.7
	AFCOPYSGF
	AFCOPYSGD
	AFSCALEBF
	AFSCALEBD
	AFLOGBF
	AFLOGBD

	// 3.2.1.8
	AFCLASSF
	AFCLASSD

	// 3.2.3.2
	AFFINTFW
	AFFINTFV
	AFFINTDW
	AFFINTDV
	AFTINTWF
	AFTINTWD
	AFTINTVF
	AFTINTVD

	// 3.2.3.3
	AFTINTRPWF
	AFTINTRPWD
	AFTINTRPVF
	AFTINTRPVD
	AFTINTRMWF
	AFTINTRMWD
	AFTINTRMVF
	AFTINTRMVD
	AFTINTRZWF
	AFTINTRZWD
	AFTINTRZVF
	AFTINTRZVD
	AFTINTRNEWF
	AFTINTRNEWD
	AFTINTRNEVF
	AFTINTRNEVD

	// 3.2.3.4
	AFRINTF
	AFRINTD

	// 3.2.4.2
	AFSEL

	// LSX and LASX memory access instructions
	AVMOVQ
	AXVMOVQ

	// LSX and LASX arithmetic instructions
	AVADDB
	AVADDH
	AVADDW
	AVADDV
	AVADDQ
	AXVADDB
	AXVADDH
	AXVADDW
	AXVADDV
	AXVADDQ
	AVSUBB
	AVSUBH
	AVSUBW
	AVSUBV
	AVSUBQ
	AXVSUBB
	AXVSUBH
	AXVSUBW
	AXVSUBV
	AXVSUBQ
	AVADDBU
	AVADDHU
	AVADDWU
	AVADDVU
	AVSUBBU
	AVSUBHU
	AVSUBWU
	AVSUBVU
	AXVADDBU
	AXVADDHU
	AXVADDWU
	AXVADDVU
	AXVSUBBU
	AXVSUBHU
	AXVSUBWU
	AXVSUBVU
	AVSADDB
	AVSADDH
	AVSADDW
	AVSADDV
	AVSSUBB
	AVSSUBH
	AVSSUBW
	AVSSUBV
	AVSADDBU
	AVSADDHU
	AVSADDWU
	AVSADDVU
	AVSSUBBU
	AVSSUBHU
	AVSSUBWU
	AVSSUBVU
	AXVSADDB
	AXVSADDH
	AXVSADDW
	AXVSADDV
	AXVSSUBB
	AXVSSUBH
	AXVSSUBW
	AXVSSUBV
	AXVSADDBU
	AXVSADDHU
	AXVSADDWU
	AXVSADDVU
	AXVSSUBBU
	AXVSSUBHU
	AXVSSUBWU
	AXVSSUBVU

	// LSX and LASX Bit-manipulation Instructions
	AVANDB
	AVORB
	AVXORB
	AVNORB
	AXVANDB
	AXVORB
	AXVXORB
	AXVNORB
	AVANDV
	AVORV
	AVXORV
	AVNORV
	AVANDNV
	AVORNV
	AXVANDV
	AXVORV
	AXVXORV
	AXVNORV
	AXVANDNV
	AXVORNV

	AVPCNTB
	AVPCNTH
	AVPCNTW
	AVPCNTV
	AXVPCNTB
	AXVPCNTH
	AXVPCNTW
	AXVPCNTV

	AVBITCLRB
	AVBITCLRH
	AVBITCLRW
	AVBITCLRV
	AVBITSETB
	AVBITSETH
	AVBITSETW
	AVBITSETV
	AVBITREVB
	AVBITREVH
	AVBITREVW
	AVBITREVV
	AXVBITCLRB
	AXVBITCLRH
	AXVBITCLRW
	AXVBITCLRV
	AXVBITSETB
	AXVBITSETH
	AXVBITSETW
	AXVBITSETV
	AXVBITREVB
	AXVBITREVH
	AXVBITREVW
	AXVBITREVV

	// LSX and LASX integer comparison instruction
	AVSEQB
	AXVSEQB
	AVSEQH
	AXVSEQH
	AVSEQW
	AXVSEQW
	AVSEQV
	AXVSEQV

	AVSLTB
	AVSLTH
	AVSLTW
	AVSLTV
	AVSLTBU
	AVSLTHU
	AVSLTWU
	AVSLTVU
	AXVSLTB
	AXVSLTH
	AXVSLTW
	AXVSLTV
	AXVSLTBU
	AXVSLTHU
	AXVSLTWU
	AXVSLTVU

	// LSX and LASX integer div and mod instructions
	AVDIVB
	AVDIVH
	AVDIVW
	AVDIVV
	AVDIVBU
	AVDIVHU
	AVDIVWU
	AVDIVVU
	AVMODB
	AVMODH
	AVMODW
	AVMODV
	AVMODBU
	AVMODHU
	AVMODWU
	AVMODVU
	AXVDIVB
	AXVDIVH
	AXVDIVW
	AXVDIVV
	AXVDIVBU
	AXVDIVHU
	AXVDIVWU
	AXVDIVVU
	AXVMODB
	AXVMODH
	AXVMODW
	AXVMODV
	AXVMODBU
	AXVMODHU
	AXVMODWU
	AXVMODVU

	// LSX and LASX shift operation instructions
	AVSLLB
	AVSLLH
	AVSLLW
	AVSLLV
	AVSRLB
	AVSRLH
	AVSRLW
	AVSRLV
	AVSRAB
	AVSRAH
	AVSRAW
	AVSRAV
	AVROTRB
	AVROTRH
	AVROTRW
	AVROTRV
	AXVSLLB
	AXVSLLH
	AXVSLLW
	AXVSLLV
	AXVSRLB
	AXVSRLH
	AXVSRLW
	AXVSRLV
	AXVSRAB
	AXVSRAH
	AXVSRAW
	AXVSRAV
	AXVROTRB
	AXVROTRH
	AXVROTRW
	AXVROTRV

	// LSX and LASX move and shuffle instructions
	AVILVLB
	AVILVLH
	AVILVLW
	AVILVLV
	AVILVHB
	AVILVHH
	AVILVHW
	AVILVHV
	AXVILVLB
	AXVILVLH
	AXVILVLW
	AXVILVLV
	AXVILVHB
	AXVILVHH
	AXVILVHW
	AXVILVHV

	// LSX and LASX integer mul instructions
	AVMULB
	AVMULH
	AVMULW
	AVMULV
	AVMUHB
	AVMUHH
	AVMUHW
	AVMUHV
	AVMUHBU
	AVMUHHU
	AVMUHWU
	AVMUHVU
	AXVMULB
	AXVMULH
	AXVMULW
	AXVMULV
	AXVMUHB
	AXVMUHH
	AXVMUHW
	AXVMUHV
	AXVMUHBU
	AXVMUHHU
	AXVMUHWU
	AXVMUHVU

	// LSX and LASX floating point instructions
	AVFSQRTF
	AVFSQRTD
	AVFRECIPF
	AVFRECIPD
	AVFRSQRTF
	AVFRSQRTD
	AXVFSQRTF
	AXVFSQRTD
	AXVFRECIPF
	AXVFRECIPD
	AXVFRSQRTF
	AXVFRSQRTD

	AVADDF
	AVADDD
	AVSUBF
	AVSUBD
	AVMULF
	AVMULD
	AVDIVF
	AVDIVD
	AXVADDF
	AXVADDD
	AXVSUBF
	AXVSUBD
	AXVMULF
	AXVMULD
	AXVDIVF
	AXVDIVD

	AVFCLASSF
	AVFCLASSD
	AXVFCLASSF
	AXVFCLASSD

	// LSX and LASX floating point conversion instructions
	AVFRINTRNEF
	AVFRINTRNED
	AVFRINTRZF
	AVFRINTRZD
	AVFRINTRPF
	AVFRINTRPD
	AVFRINTRMF
	AVFRINTRMD
	AVFRINTF
	AVFRINTD
	AXVFRINTRNEF
	AXVFRINTRNED
	AXVFRINTRZF
	AXVFRINTRZD
	AXVFRINTRPF
	AXVFRINTRPD
	AXVFRINTRMF
	AXVFRINTRMD
	AXVFRINTF
	AXVFRINTD

	// LSX and LASX integer neg instructions
	AVNEGB
	AVNEGH
	AVNEGW
	AVNEGV
	AXVNEGB
	AXVNEGH
	AXVNEGW
	AXVNEGV

	// LSX and LASX mul instructions that operate on even or odd positions
	AVMULWEVHB
	AVMULWEVWH
	AVMULWEVVW
	AVMULWEVQV
	AVMULWODHB
	AVMULWODWH
	AVMULWODVW
	AVMULWODQV
	AVMULWEVHBU
	AVMULWEVWHU
	AVMULWEVVWU
	AVMULWEVQVU
	AVMULWODHBU
	AVMULWODWHU
	AVMULWODVWU
	AVMULWODQVU
	AXVMULWEVHB
	AXVMULWEVWH
	AXVMULWEVVW
	AXVMULWEVQV
	AXVMULWODHB
	AXVMULWODWH
	AXVMULWODVW
	AXVMULWODQV
	AXVMULWEVHBU
	AXVMULWEVWHU
	AXVMULWEVVWU
	AXVMULWEVQVU
	AXVMULWODHBU
	AXVMULWODWHU
	AXVMULWODVWU
	AXVMULWODQVU
	AVMULWEVHBUB
	AVMULWEVWHUH
	AVMULWEVVWUW
	AVMULWEVQVUV
	AVMULWODHBUB
	AVMULWODWHUH
	AVMULWODVWUW
	AVMULWODQVUV
	AXVMULWEVHBUB
	AXVMULWEVWHUH
	AXVMULWEVVWUW
	AXVMULWEVQVUV
	AXVMULWODHBUB
	AXVMULWODWHUH
	AXVMULWODVWUW
	AXVMULWODQVUV

	AVADDWEVHB
	AVADDWEVWH
	AVADDWEVVW
	AVADDWEVQV
	AVSUBWEVHB
	AVSUBWEVWH
	AVSUBWEVVW
	AVSUBWEVQV
	AVADDWODHB
	AVADDWODWH
	AVADDWODVW
	AVADDWODQV
	AVSUBWODHB
	AVSUBWODWH
	AVSUBWODVW
	AVSUBWODQV
	AXVADDWEVHB
	AXVADDWEVWH
	AXVADDWEVVW
	AXVADDWEVQV
	AXVSUBWEVHB
	AXVSUBWEVWH
	AXVSUBWEVVW
	AXVSUBWEVQV
	AXVADDWODHB
	AXVADDWODWH
	AXVADDWODVW
	AXVADDWODQV
	AXVSUBWODHB
	AXVSUBWODWH
	AXVSUBWODVW
	AXVSUBWODQV
	AVADDWEVHBU
	AVADDWEVWHU
	AVADDWEVVWU
	AVADDWEVQVU
	AVSUBWEVHBU
	AVSUBWEVWHU
	AVSUBWEVVWU
	AVSUBWEVQVU
	AVADDWODHBU
	AVADDWODWHU
	AVADDWODVWU
	AVADDWODQVU
	AVSUBWODHBU
	AVSUBWODWHU
	AVSUBWODVWU
	AVSUBWODQVU
	AXVADDWEVHBU
	AXVADDWEVWHU
	AXVADDWEVVWU
	AXVADDWEVQVU
	AXVSUBWEVHBU
	AXVSUBWEVWHU
	AXVSUBWEVVWU
	AXVSUBWEVQVU
	AXVADDWODHBU
	AXVADDWODWHU
	AXVADDWODVWU
	AXVADDWODQVU
	AXVSUBWODHBU
	AXVSUBWODWHU
	AXVSUBWODVWU
	AXVSUBWODQVU

	AVMADDB
	AVMADDH
	AVMADDW
	AVMADDV
	AVMSUBB
	AVMSUBH
	AVMSUBW
	AVMSUBV

	AXVMADDB
	AXVMADDH
	AXVMADDW
	AXVMADDV
	AXVMSUBB
	AXVMSUBH
	AXVMSUBW
	AXVMSUBV

	AVMADDWEVHB
	AVMADDWEVWH
	AVMADDWEVVW
	AVMADDWEVQV
	AVMADDWODHB
	AVMADDWODWH
	AVMADDWODVW
	AVMADDWODQV

	AVMADDWEVHBU
	AVMADDWEVWHU
	AVMADDWEVVWU
	AVMADDWEVQVU
	AVMADDWODHBU
	AVMADDWODWHU
	AVMADDWODVWU
	AVMADDWODQVU

	AVMADDWEVHBUB
	AVMADDWEVWHUH
	AVMADDWEVVWUW
	AVMADDWEVQVUV
	AVMADDWODHBUB
	AVMADDWODWHUH
	AVMADDWODVWUW
	AVMADDWODQVUV

	AXVMADDWEVHB
	AXVMADDWEVWH
	AXVMADDWEVVW
	AXVMADDWEVQV
	AXVMADDWODHB
	AXVMADDWODWH
	AXVMADDWODVW
	AXVMADDWODQV

	AXVMADDWEVHBU
	AXVMADDWEVWHU
	AXVMADDWEVVWU
	AXVMADDWEVQVU
	AXVMADDWODHBU
	AXVMADDWODWHU
	AXVMADDWODVWU
	AXVMADDWODQVU

	AXVMADDWEVHBUB
	AXVMADDWEVWHUH
	AXVMADDWEVVWUW
	AXVMADDWEVQVUV
	AXVMADDWODHBUB
	AXVMADDWODWHUH
	AXVMADDWODVWUW
	AXVMADDWODQVUV

	AVSHUF4IB
	AVSHUF4IH
	AVSHUF4IW
	AVSHUF4IV
	AXVSHUF4IB
	AXVSHUF4IH
	AXVSHUF4IW
	AXVSHUF4IV

	AVSHUFB
	AVSHUFH
	AVSHUFW
	AVSHUFV
	AXVSHUFB
	AXVSHUFH
	AXVSHUFW
	AXVSHUFV

	AVPERMIW
	AXVPERMIW
	AXVPERMIV
	AXVPERMIQ

	AVEXTRINSB
	AVEXTRINSH
	AVEXTRINSW
	AVEXTRINSV
	AXVEXTRINSB
	AXVEXTRINSH
	AXVEXTRINSW
	AXVEXTRINSV

	AVSETEQV
	AVSETNEV
	AVSETANYEQB
	AVSETANYEQH
	AVSETANYEQW
	AVSETANYEQV
	AVSETALLNEB
	AVSETALLNEH
	AVSETALLNEW
	AVSETALLNEV
	AXVSETEQV
	AXVSETNEV
	AXVSETANYEQB
	AXVSETANYEQH
	AXVSETANYEQW
	AXVSETANYEQV
	AXVSETALLNEB
	AXVSETALLNEH
	AXVSETALLNEW
	AXVSETALLNEV

	ALAST

	// aliases
	AJMP = obj.AJMP
	AJAL = obj.ACALL
	ARET = obj.ARET
)
