podman
1032 строки · 13.3 Кб
1// cmd/9c/9.out.h from Vita Nuova.
2//
3// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
4// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
5// Portions Copyright © 1997-1999 Vita Nuova Limited
6// Portions Copyright © 2000-2008 Vita Nuova Holdings Limited (www.vitanuova.com)
7// Portions Copyright © 2004,2006 Bruce Ellis
8// Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
9// Revisions Copyright © 2000-2008 Lucent Technologies Inc. and others
10// Portions Copyright © 2009 The Go Authors. All rights reserved.
11//
12// Permission is hereby granted, free of charge, to any person obtaining a copy
13// of this software and associated documentation files (the "Software"), to deal
14// in the Software without restriction, including without limitation the rights
15// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16// copies of the Software, and to permit persons to whom the Software is
17// furnished to do so, subject to the following conditions:
18//
19// The above copyright notice and this permission notice shall be included in
20// all copies or substantial portions of the Software.
21//
22// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
28// THE SOFTWARE.
29
30package ppc6431
32import "github.com/twitchyliquid64/golang-asm/obj"33
34//go:generate go run ../stringer.go -i $GOFILE -o anames.go -p ppc64
35
36/*
37* powerpc 64
38*/
39const (40NSNAME = 841NSYM = 5042NREG = 32 /* number of general registers */43NFREG = 32 /* number of floating point registers */44)
45
46const (47/* RBasePPC64 = 4096 */48/* R0=4096 ... R31=4127 */49REG_R0 = obj.RBasePPC64 + iota50REG_R1
51REG_R2
52REG_R3
53REG_R4
54REG_R5
55REG_R6
56REG_R7
57REG_R8
58REG_R9
59REG_R10
60REG_R11
61REG_R12
62REG_R13
63REG_R14
64REG_R15
65REG_R16
66REG_R17
67REG_R18
68REG_R19
69REG_R20
70REG_R21
71REG_R22
72REG_R23
73REG_R24
74REG_R25
75REG_R26
76REG_R27
77REG_R28
78REG_R29
79REG_R30
80REG_R31
81
82/* F0=4128 ... F31=4159 */83REG_F0
84REG_F1
85REG_F2
86REG_F3
87REG_F4
88REG_F5
89REG_F6
90REG_F7
91REG_F8
92REG_F9
93REG_F10
94REG_F11
95REG_F12
96REG_F13
97REG_F14
98REG_F15
99REG_F16
100REG_F17
101REG_F18
102REG_F19
103REG_F20
104REG_F21
105REG_F22
106REG_F23
107REG_F24
108REG_F25
109REG_F26
110REG_F27
111REG_F28
112REG_F29
113REG_F30
114REG_F31
115
116/* V0=4160 ... V31=4191 */117REG_V0
118REG_V1
119REG_V2
120REG_V3
121REG_V4
122REG_V5
123REG_V6
124REG_V7
125REG_V8
126REG_V9
127REG_V10
128REG_V11
129REG_V12
130REG_V13
131REG_V14
132REG_V15
133REG_V16
134REG_V17
135REG_V18
136REG_V19
137REG_V20
138REG_V21
139REG_V22
140REG_V23
141REG_V24
142REG_V25
143REG_V26
144REG_V27
145REG_V28
146REG_V29
147REG_V30
148REG_V31
149
150/* VS0=4192 ... VS63=4255 */151REG_VS0
152REG_VS1
153REG_VS2
154REG_VS3
155REG_VS4
156REG_VS5
157REG_VS6
158REG_VS7
159REG_VS8
160REG_VS9
161REG_VS10
162REG_VS11
163REG_VS12
164REG_VS13
165REG_VS14
166REG_VS15
167REG_VS16
168REG_VS17
169REG_VS18
170REG_VS19
171REG_VS20
172REG_VS21
173REG_VS22
174REG_VS23
175REG_VS24
176REG_VS25
177REG_VS26
178REG_VS27
179REG_VS28
180REG_VS29
181REG_VS30
182REG_VS31
183REG_VS32
184REG_VS33
185REG_VS34
186REG_VS35
187REG_VS36
188REG_VS37
189REG_VS38
190REG_VS39
191REG_VS40
192REG_VS41
193REG_VS42
194REG_VS43
195REG_VS44
196REG_VS45
197REG_VS46
198REG_VS47
199REG_VS48
200REG_VS49
201REG_VS50
202REG_VS51
203REG_VS52
204REG_VS53
205REG_VS54
206REG_VS55
207REG_VS56
208REG_VS57
209REG_VS58
210REG_VS59
211REG_VS60
212REG_VS61
213REG_VS62
214REG_VS63
215
216REG_CR0
217REG_CR1
218REG_CR2
219REG_CR3
220REG_CR4
221REG_CR5
222REG_CR6
223REG_CR7
224
225REG_MSR
226REG_FPSCR
227REG_CR
228
229REG_SPECIAL = REG_CR0230
231REG_SPR0 = obj.RBasePPC64 + 1024 // first of 1024 registers232REG_DCR0 = obj.RBasePPC64 + 2048 // first of 1024 registers233
234REG_XER = REG_SPR0 + 1235REG_LR = REG_SPR0 + 8236REG_CTR = REG_SPR0 + 9237
238REGZERO = REG_R0 /* set to zero */239REGSP = REG_R1240REGSB = REG_R2241REGRET = REG_R3242REGARG = -1 /* -1 disables passing the first argument in register */243REGRT1 = REG_R3 /* reserved for runtime, duffzero and duffcopy */244REGRT2 = REG_R4 /* reserved for runtime, duffcopy */245REGMIN = REG_R7 /* register variables allocated from here to REGMAX */246REGCTXT = REG_R11 /* context for closures */247REGTLS = REG_R13 /* C ABI TLS base pointer */248REGMAX = REG_R27249REGEXT = REG_R30 /* external registers allocated from here down */250REGG = REG_R30 /* G */251REGTMP = REG_R31 /* used by the linker */252FREGRET = REG_F0253FREGMIN = REG_F17 /* first register variable */254FREGMAX = REG_F26 /* last register variable for 9g only */255FREGEXT = REG_F26 /* first external register */256)
257
258// OpenPOWER ABI for Linux Supplement Power Architecture 64-Bit ELF V2 ABI
259// https://openpowerfoundation.org/?resource_lib=64-bit-elf-v2-abi-specification-power-architecture
260var PPC64DWARFRegisters = map[int16]int16{}261
262func init() {263// f assigns dwarfregister[from:to] = (base):(to-from+base)264f := func(from, to, base int16) {265for r := int16(from); r <= to; r++ {266PPC64DWARFRegisters[r] = r - from + base267}268}269f(REG_R0, REG_R31, 0)270f(REG_F0, REG_F31, 32)271f(REG_V0, REG_V31, 77)272f(REG_CR0, REG_CR7, 68)273
274f(REG_VS0, REG_VS31, 32) // overlaps F0-F31275f(REG_VS32, REG_VS63, 77) // overlaps V0-V31276PPC64DWARFRegisters[REG_LR] = 65277PPC64DWARFRegisters[REG_CTR] = 66278PPC64DWARFRegisters[REG_XER] = 76279}
280
281/*
282* GENERAL:
283*
284* compiler allocates R3 up as temps
285* compiler allocates register variables R7-R27
286* compiler allocates external registers R30 down
287*
288* compiler allocates register variables F17-F26
289* compiler allocates external registers F26 down
290*/
291const (292BIG = 32768 - 8293)
294
295const (296/* mark flags */297LABEL = 1 << 0298LEAF = 1 << 1299FLOAT = 1 << 2300BRANCH = 1 << 3301LOAD = 1 << 4302FCMP = 1 << 5303SYNC = 1 << 6304LIST = 1 << 7305FOLL = 1 << 8306NOSCHED = 1 << 9307)
308
309// Values for use in branch instruction BC
310// BC B0,BI,label
311// BO is type of branch + likely bits described below
312// BI is CR value + branch type
313// ex: BEQ CR2,label is BC 12,10,label
314// 12 = BO_BCR
315// 10 = BI_CR2 + BI_EQ
316
317const (318BI_CR0 = 0319BI_CR1 = 4320BI_CR2 = 8321BI_CR3 = 12322BI_CR4 = 16323BI_CR5 = 20324BI_CR6 = 24325BI_CR7 = 28326BI_LT = 0327BI_GT = 1328BI_EQ = 2329BI_OVF = 3330)
331
332// Values for the BO field. Add the branch type to
333// the likely bits, if a likely setting is known.
334// If branch likely or unlikely is not known, don't set it.
335// e.g. branch on cr+likely = 15
336
337const (338BO_BCTR = 16 // branch on ctr value339BO_BCR = 12 // branch on cr value340BO_BCRBCTR = 8 // branch on ctr and cr value341BO_NOTBCR = 4 // branch on not cr value342BO_UNLIKELY = 2 // value for unlikely343BO_LIKELY = 3 // value for likely344)
345
346// Bit settings from the CR
347
348const (349C_COND_LT = iota // 0 result is negative350C_COND_GT // 1 result is positive351C_COND_EQ // 2 result is zero352C_COND_SO // 3 summary overflow or FP compare w/ NaN353)
354
355const (356C_NONE = iota357C_REG
358C_FREG
359C_VREG
360C_VSREG
361C_CREG
362C_SPR /* special processor register */363C_ZCON
364C_SCON /* 16 bit signed */365C_UCON /* 32 bit signed, low 16 bits 0 */366C_ADDCON /* -0x8000 <= v < 0 */367C_ANDCON /* 0 < v <= 0xFFFF */368C_LCON /* other 32 */369C_DCON /* other 64 (could subdivide further) */370C_SACON /* $n(REG) where n <= int16 */371C_SECON
372C_LACON /* $n(REG) where int16 < n <= int32 */373C_LECON
374C_DACON /* $n(REG) where int32 < n */375C_SBRA
376C_LBRA
377C_LBRAPIC
378C_SAUTO
379C_LAUTO
380C_SEXT
381C_LEXT
382C_ZOREG // conjecture: either (1) register + zeroed offset, or (2) "R0" implies zero or C_REG383C_SOREG // register + signed offset384C_LOREG
385C_FPSCR
386C_MSR
387C_XER
388C_LR
389C_CTR
390C_ANY
391C_GOK
392C_ADDR
393C_GOTADDR
394C_TOCADDR
395C_TLS_LE
396C_TLS_IE
397C_TEXTSIZE
398
399C_NCLASS /* must be the last */400)
401
402const (403AADD = obj.ABasePPC64 + obj.A_ARCHSPECIFIC + iota404AADDCC
405AADDIS
406AADDV
407AADDVCC
408AADDC
409AADDCCC
410AADDCV
411AADDCVCC
412AADDME
413AADDMECC
414AADDMEVCC
415AADDMEV
416AADDE
417AADDECC
418AADDEVCC
419AADDEV
420AADDZE
421AADDZECC
422AADDZEVCC
423AADDZEV
424AADDEX
425AAND
426AANDCC
427AANDN
428AANDNCC
429AANDISCC
430ABC
431ABCL
432ABEQ
433ABGE // not LT = G/E/U434ABGT
435ABLE // not GT = L/E/U436ABLT
437ABNE // not EQ = L/G/U438ABVC // Unordered-clear439ABVS // Unordered-set440ACMP
441ACMPU
442ACMPEQB
443ACNTLZW
444ACNTLZWCC
445ACRAND
446ACRANDN
447ACREQV
448ACRNAND
449ACRNOR
450ACROR
451ACRORN
452ACRXOR
453ADIVW
454ADIVWCC
455ADIVWVCC
456ADIVWV
457ADIVWU
458ADIVWUCC
459ADIVWUVCC
460ADIVWUV
461AMODUD
462AMODUW
463AMODSD
464AMODSW
465AEQV
466AEQVCC
467AEXTSB
468AEXTSBCC
469AEXTSH
470AEXTSHCC
471AFABS
472AFABSCC
473AFADD
474AFADDCC
475AFADDS
476AFADDSCC
477AFCMPO
478AFCMPU
479AFCTIW
480AFCTIWCC
481AFCTIWZ
482AFCTIWZCC
483AFDIV
484AFDIVCC
485AFDIVS
486AFDIVSCC
487AFMADD
488AFMADDCC
489AFMADDS
490AFMADDSCC
491AFMOVD
492AFMOVDCC
493AFMOVDU
494AFMOVS
495AFMOVSU
496AFMOVSX
497AFMOVSZ
498AFMSUB
499AFMSUBCC
500AFMSUBS
501AFMSUBSCC
502AFMUL
503AFMULCC
504AFMULS
505AFMULSCC
506AFNABS
507AFNABSCC
508AFNEG
509AFNEGCC
510AFNMADD
511AFNMADDCC
512AFNMADDS
513AFNMADDSCC
514AFNMSUB
515AFNMSUBCC
516AFNMSUBS
517AFNMSUBSCC
518AFRSP
519AFRSPCC
520AFSUB
521AFSUBCC
522AFSUBS
523AFSUBSCC
524AISEL
525AMOVMW
526ALBAR
527ALHAR
528ALSW
529ALWAR
530ALWSYNC
531AMOVDBR
532AMOVWBR
533AMOVB
534AMOVBU
535AMOVBZ
536AMOVBZU
537AMOVH
538AMOVHBR
539AMOVHU
540AMOVHZ
541AMOVHZU
542AMOVW
543AMOVWU
544AMOVFL
545AMOVCRFS
546AMTFSB0
547AMTFSB0CC
548AMTFSB1
549AMTFSB1CC
550AMULHW
551AMULHWCC
552AMULHWU
553AMULHWUCC
554AMULLW
555AMULLWCC
556AMULLWVCC
557AMULLWV
558ANAND
559ANANDCC
560ANEG
561ANEGCC
562ANEGVCC
563ANEGV
564ANOR
565ANORCC
566AOR
567AORCC
568AORN
569AORNCC
570AORIS
571AREM
572AREMU
573ARFI
574ARLWMI
575ARLWMICC
576ARLWNM
577ARLWNMCC
578ACLRLSLWI
579ASLW
580ASLWCC
581ASRW
582ASRAW
583ASRAWCC
584ASRWCC
585ASTBCCC
586ASTHCCC
587ASTSW
588ASTWCCC
589ASUB
590ASUBCC
591ASUBVCC
592ASUBC
593ASUBCCC
594ASUBCV
595ASUBCVCC
596ASUBME
597ASUBMECC
598ASUBMEVCC
599ASUBMEV
600ASUBV
601ASUBE
602ASUBECC
603ASUBEV
604ASUBEVCC
605ASUBZE
606ASUBZECC
607ASUBZEVCC
608ASUBZEV
609ASYNC
610AXOR
611AXORCC
612AXORIS
613
614ADCBF
615ADCBI
616ADCBST
617ADCBT
618ADCBTST
619ADCBZ
620AECIWX
621AECOWX
622AEIEIO
623AICBI
624AISYNC
625APTESYNC
626ATLBIE
627ATLBIEL
628ATLBSYNC
629ATW
630
631ASYSCALL
632AWORD
633
634ARFCI
635
636AFCPSGN
637AFCPSGNCC
638/* optional on 32-bit */639AFRES
640AFRESCC
641AFRIM
642AFRIMCC
643AFRIP
644AFRIPCC
645AFRIZ
646AFRIZCC
647AFRIN
648AFRINCC
649AFRSQRTE
650AFRSQRTECC
651AFSEL
652AFSELCC
653AFSQRT
654AFSQRTCC
655AFSQRTS
656AFSQRTSCC
657
658/* 64-bit */659
660ACNTLZD
661ACNTLZDCC
662ACMPW /* CMP with L=0 */663ACMPWU
664ACMPB
665AFTDIV
666AFTSQRT
667ADIVD
668ADIVDCC
669ADIVDE
670ADIVDECC
671ADIVDEU
672ADIVDEUCC
673ADIVDVCC
674ADIVDV
675ADIVDU
676ADIVDUCC
677ADIVDUVCC
678ADIVDUV
679AEXTSW
680AEXTSWCC
681/* AFCFIW; AFCFIWCC */682AFCFID
683AFCFIDCC
684AFCFIDU
685AFCFIDUCC
686AFCFIDS
687AFCFIDSCC
688AFCTID
689AFCTIDCC
690AFCTIDZ
691AFCTIDZCC
692ALDAR
693AMOVD
694AMOVDU
695AMOVWZ
696AMOVWZU
697AMULHD
698AMULHDCC
699AMULHDU
700AMULHDUCC
701AMULLD
702AMULLDCC
703AMULLDVCC
704AMULLDV
705ARFID
706ARLDMI
707ARLDMICC
708ARLDIMI
709ARLDIMICC
710ARLDC
711ARLDCCC
712ARLDCR
713ARLDCRCC
714ARLDICR
715ARLDICRCC
716ARLDCL
717ARLDCLCC
718ARLDICL
719ARLDICLCC
720ARLDIC
721ARLDICCC
722ACLRLSLDI
723AROTL
724AROTLW
725ASLBIA
726ASLBIE
727ASLBMFEE
728ASLBMFEV
729ASLBMTE
730ASLD
731ASLDCC
732ASRD
733ASRAD
734ASRADCC
735ASRDCC
736ASTDCCC
737ATD
738
739/* 64-bit pseudo operation */740ADWORD
741AREMD
742AREMDU
743
744/* more 64-bit operations */745AHRFID
746APOPCNTD
747APOPCNTW
748APOPCNTB
749ACNTTZW
750ACNTTZWCC
751ACNTTZD
752ACNTTZDCC
753ACOPY
754APASTECC
755ADARN
756ALDMX
757AMADDHD
758AMADDHDU
759AMADDLD
760
761/* Vector */762ALV
763ALVEBX
764ALVEHX
765ALVEWX
766ALVX
767ALVXL
768ALVSL
769ALVSR
770ASTV
771ASTVEBX
772ASTVEHX
773ASTVEWX
774ASTVX
775ASTVXL
776AVAND
777AVANDC
778AVNAND
779AVOR
780AVORC
781AVNOR
782AVXOR
783AVEQV
784AVADDUM
785AVADDUBM
786AVADDUHM
787AVADDUWM
788AVADDUDM
789AVADDUQM
790AVADDCU
791AVADDCUQ
792AVADDCUW
793AVADDUS
794AVADDUBS
795AVADDUHS
796AVADDUWS
797AVADDSS
798AVADDSBS
799AVADDSHS
800AVADDSWS
801AVADDE
802AVADDEUQM
803AVADDECUQ
804AVSUBUM
805AVSUBUBM
806AVSUBUHM
807AVSUBUWM
808AVSUBUDM
809AVSUBUQM
810AVSUBCU
811AVSUBCUQ
812AVSUBCUW
813AVSUBUS
814AVSUBUBS
815AVSUBUHS
816AVSUBUWS
817AVSUBSS
818AVSUBSBS
819AVSUBSHS
820AVSUBSWS
821AVSUBE
822AVSUBEUQM
823AVSUBECUQ
824AVMULESB
825AVMULOSB
826AVMULEUB
827AVMULOUB
828AVMULESH
829AVMULOSH
830AVMULEUH
831AVMULOUH
832AVMULESW
833AVMULOSW
834AVMULEUW
835AVMULOUW
836AVMULUWM
837AVPMSUM
838AVPMSUMB
839AVPMSUMH
840AVPMSUMW
841AVPMSUMD
842AVMSUMUDM
843AVR
844AVRLB
845AVRLH
846AVRLW
847AVRLD
848AVS
849AVSLB
850AVSLH
851AVSLW
852AVSL
853AVSLO
854AVSRB
855AVSRH
856AVSRW
857AVSR
858AVSRO
859AVSLD
860AVSRD
861AVSA
862AVSRAB
863AVSRAH
864AVSRAW
865AVSRAD
866AVSOI
867AVSLDOI
868AVCLZ
869AVCLZB
870AVCLZH
871AVCLZW
872AVCLZD
873AVPOPCNT
874AVPOPCNTB
875AVPOPCNTH
876AVPOPCNTW
877AVPOPCNTD
878AVCMPEQ
879AVCMPEQUB
880AVCMPEQUBCC
881AVCMPEQUH
882AVCMPEQUHCC
883AVCMPEQUW
884AVCMPEQUWCC
885AVCMPEQUD
886AVCMPEQUDCC
887AVCMPGT
888AVCMPGTUB
889AVCMPGTUBCC
890AVCMPGTUH
891AVCMPGTUHCC
892AVCMPGTUW
893AVCMPGTUWCC
894AVCMPGTUD
895AVCMPGTUDCC
896AVCMPGTSB
897AVCMPGTSBCC
898AVCMPGTSH
899AVCMPGTSHCC
900AVCMPGTSW
901AVCMPGTSWCC
902AVCMPGTSD
903AVCMPGTSDCC
904AVCMPNEZB
905AVCMPNEZBCC
906AVCMPNEB
907AVCMPNEBCC
908AVCMPNEH
909AVCMPNEHCC
910AVCMPNEW
911AVCMPNEWCC
912AVPERM
913AVPERMXOR
914AVPERMR
915AVBPERMQ
916AVBPERMD
917AVSEL
918AVSPLT
919AVSPLTB
920AVSPLTH
921AVSPLTW
922AVSPLTI
923AVSPLTISB
924AVSPLTISH
925AVSPLTISW
926AVCIPH
927AVCIPHER
928AVCIPHERLAST
929AVNCIPH
930AVNCIPHER
931AVNCIPHERLAST
932AVSBOX
933AVSHASIGMA
934AVSHASIGMAW
935AVSHASIGMAD
936AVMRGEW
937AVMRGOW
938
939/* VSX */940ALXV
941ALXVL
942ALXVLL
943ALXVD2X
944ALXVW4X
945ALXVH8X
946ALXVB16X
947ALXVX
948ALXVDSX
949ASTXV
950ASTXVL
951ASTXVLL
952ASTXVD2X
953ASTXVW4X
954ASTXVH8X
955ASTXVB16X
956ASTXVX
957ALXSDX
958ASTXSDX
959ALXSIWAX
960ALXSIWZX
961ASTXSIWX
962AMFVSRD
963AMFFPRD
964AMFVRD
965AMFVSRWZ
966AMFVSRLD
967AMTVSRD
968AMTFPRD
969AMTVRD
970AMTVSRWA
971AMTVSRWZ
972AMTVSRDD
973AMTVSRWS
974AXXLAND
975AXXLANDC
976AXXLEQV
977AXXLNAND
978AXXLOR
979AXXLORC
980AXXLNOR
981AXXLORQ
982AXXLXOR
983AXXSEL
984AXXMRGHW
985AXXMRGLW
986AXXSPLT
987AXXSPLTW
988AXXSPLTIB
989AXXPERM
990AXXPERMDI
991AXXSLDWI
992AXXBRQ
993AXXBRD
994AXXBRW
995AXXBRH
996AXSCVDPSP
997AXSCVSPDP
998AXSCVDPSPN
999AXSCVSPDPN
1000AXVCVDPSP
1001AXVCVSPDP
1002AXSCVDPSXDS
1003AXSCVDPSXWS
1004AXSCVDPUXDS
1005AXSCVDPUXWS
1006AXSCVSXDDP
1007AXSCVUXDDP
1008AXSCVSXDSP
1009AXSCVUXDSP
1010AXVCVDPSXDS
1011AXVCVDPSXWS
1012AXVCVDPUXDS
1013AXVCVDPUXWS
1014AXVCVSPSXDS
1015AXVCVSPSXWS
1016AXVCVSPUXDS
1017AXVCVSPUXWS
1018AXVCVSXDDP
1019AXVCVSXWDP
1020AXVCVUXDDP
1021AXVCVUXWDP
1022AXVCVSXDSP
1023AXVCVSXWSP
1024AXVCVUXDSP
1025AXVCVUXWSP
1026
1027ALAST
1028
1029// aliases1030ABR = obj.AJMP1031ABL = obj.ACALL1032)
1033