1// Based on cmd/internal/obj/ppc64/a.out.go.
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 s390x
31
32import "cmd/internal/obj"
33
34//go:generate go run ../stringer.go -i $GOFILE -o anames.go -p s390x
35
36const (
37	NSNAME = 8
38	NSYM   = 50
39	NREG   = 16 // number of general purpose registers
40	NFREG  = 16 // number of floating point registers
41)
42
43const (
44	// General purpose registers (GPRs).
45	REG_R0 = obj.RBaseS390X + iota
46	REG_R1
47	REG_R2
48	REG_R3
49	REG_R4
50	REG_R5
51	REG_R6
52	REG_R7
53	REG_R8
54	REG_R9
55	REG_R10
56	REG_R11
57	REG_R12
58	REG_R13
59	REG_R14
60	REG_R15
61
62	// Floating point registers (FPRs).
63	REG_F0
64	REG_F1
65	REG_F2
66	REG_F3
67	REG_F4
68	REG_F5
69	REG_F6
70	REG_F7
71	REG_F8
72	REG_F9
73	REG_F10
74	REG_F11
75	REG_F12
76	REG_F13
77	REG_F14
78	REG_F15
79
80	// Vector registers (VRs) - only available when the vector
81	// facility is installed.
82	// V0-V15 are aliases for F0-F15.
83	// We keep them in a separate space to make printing etc. easier
84	// If the code generator ever emits vector instructions it will
85	// need to take into account the aliasing.
86	REG_V0
87	REG_V1
88	REG_V2
89	REG_V3
90	REG_V4
91	REG_V5
92	REG_V6
93	REG_V7
94	REG_V8
95	REG_V9
96	REG_V10
97	REG_V11
98	REG_V12
99	REG_V13
100	REG_V14
101	REG_V15
102	REG_V16
103	REG_V17
104	REG_V18
105	REG_V19
106	REG_V20
107	REG_V21
108	REG_V22
109	REG_V23
110	REG_V24
111	REG_V25
112	REG_V26
113	REG_V27
114	REG_V28
115	REG_V29
116	REG_V30
117	REG_V31
118
119	// Access registers (ARs).
120	// The thread pointer is typically stored in the register pair
121	// AR0 and AR1.
122	REG_AR0
123	REG_AR1
124	REG_AR2
125	REG_AR3
126	REG_AR4
127	REG_AR5
128	REG_AR6
129	REG_AR7
130	REG_AR8
131	REG_AR9
132	REG_AR10
133	REG_AR11
134	REG_AR12
135	REG_AR13
136	REG_AR14
137	REG_AR15
138
139	REG_RESERVED // end of allocated registers
140
141	REGARG  = -1      // -1 disables passing the first argument in register
142	REGRT1  = REG_R3  // used during zeroing of the stack - not reserved
143	REGRT2  = REG_R4  // used during zeroing of the stack - not reserved
144	REGTMP  = REG_R10 // scratch register used in the assembler and linker
145	REGTMP2 = REG_R11 // scratch register used in the assembler and linker
146	REGCTXT = REG_R12 // context for closures
147	REGG    = REG_R13 // G
148	REG_LR  = REG_R14 // link register
149	REGSP   = REG_R15 // stack pointer
150)
151
152const (
153	BIG    = 32768 - 8
154	DISP12 = 4096
155	DISP16 = 65536
156	DISP20 = 1048576
157)
158
159const (
160	// mark flags
161	LEAF = 1 << iota
162	BRANCH
163)
164
165const ( // comments from func aclass in asmz.go
166	C_NONE     = iota
167	C_REG      // general-purpose register (64-bit)
168	C_FREG     // floating-point register (64-bit)
169	C_VREG     // vector register (128-bit)
170	C_AREG     // access register (32-bit)
171	C_ZCON     // constant == 0
172	C_SCON     // 0 <= constant <= 0x7fff (positive int16)
173	C_UCON     // constant & 0xffff == 0 (int16 or uint16)
174	C_ADDCON   // 0 > constant >= -0x8000 (negative int16)
175	C_ANDCON   // constant <= 0xffff
176	C_LCON     // constant (int32 or uint32)
177	C_DCON     // constant (int64 or uint64)
178	C_SACON    // computed address, 16-bit displacement, possibly SP-relative
179	C_LACON    // computed address, 32-bit displacement, possibly SP-relative
180	C_DACON    // computed address, 64-bit displacment?
181	C_SBRA     // short branch
182	C_LBRA     // long branch
183	C_SAUTO    // short auto
184	C_LAUTO    // long auto
185	C_ZOREG    // heap address, register-based, displacement == 0
186	C_SOREG    // heap address, register-based, int16 displacement
187	C_LOREG    // heap address, register-based, int32 displacement
188	C_TLS_LE   // TLS - local exec model (for executables)
189	C_TLS_IE   // TLS - initial exec model (for shared libraries loaded at program startup)
190	C_GOK      // general address
191	C_ADDR     // relocation for extern or static symbols (loads and stores)
192	C_SYMADDR  // relocation for extern or static symbols (address taking)
193	C_GOTADDR  // GOT slot for a symbol in -dynlink mode
194	C_TEXTSIZE // text size
195	C_ANY
196	C_NCLASS // must be the last
197)
198
199const (
200	// integer arithmetic
201	AADD = obj.ABaseS390X + obj.A_ARCHSPECIFIC + iota
202	AADDC
203	AADDE
204	AADDW
205	ADIVW
206	ADIVWU
207	ADIVD
208	ADIVDU
209	AMODW
210	AMODWU
211	AMODD
212	AMODDU
213	AMULLW
214	AMULLD
215	AMULHD
216	AMULHDU
217	ASUB
218	ASUBC
219	ASUBV
220	ASUBE
221	ASUBW
222	ANEG
223	ANEGW
224
225	// integer moves
226	AMOVWBR
227	AMOVB
228	AMOVBZ
229	AMOVH
230	AMOVHBR
231	AMOVHZ
232	AMOVW
233	AMOVWZ
234	AMOVD
235	AMOVDBR
236
237	// conditional moves
238	AMOVDEQ
239	AMOVDGE
240	AMOVDGT
241	AMOVDLE
242	AMOVDLT
243	AMOVDNE
244
245	// find leftmost one
246	AFLOGR
247
248	// integer bitwise
249	AAND
250	AANDW
251	AOR
252	AORW
253	AXOR
254	AXORW
255	ASLW
256	ASLD
257	ASRW
258	ASRAW
259	ASRD
260	ASRAD
261	ARLL
262	ARLLG
263
264	// floating point
265	AFABS
266	AFADD
267	AFADDS
268	AFCMPO
269	AFCMPU
270	ACEBR
271	AFDIV
272	AFDIVS
273	AFMADD
274	AFMADDS
275	AFMOVD
276	AFMOVS
277	AFMSUB
278	AFMSUBS
279	AFMUL
280	AFMULS
281	AFNABS
282	AFNEG
283	AFNEGS
284	ALEDBR
285	ALDEBR
286	AFSUB
287	AFSUBS
288	AFSQRT
289	AFSQRTS
290	AFIEBR
291	AFIDBR
292
293	// move from GPR to FPR and vice versa
294	ALDGR
295	ALGDR
296
297	// convert from int32/int64 to float/float64
298	ACEFBRA
299	ACDFBRA
300	ACEGBRA
301	ACDGBRA
302
303	// convert from float/float64 to int32/int64
304	ACFEBRA
305	ACFDBRA
306	ACGEBRA
307	ACGDBRA
308
309	// convert from uint32/uint64 to float/float64
310	ACELFBR
311	ACDLFBR
312	ACELGBR
313	ACDLGBR
314
315	// convert from float/float64 to uint32/uint64
316	ACLFEBR
317	ACLFDBR
318	ACLGEBR
319	ACLGDBR
320
321	// compare
322	ACMP
323	ACMPU
324	ACMPW
325	ACMPWU
326
327	// compare and swap
328	ACS
329	ACSG
330
331	// serialize
332	ASYNC
333
334	// branch
335	ABC
336	ABCL
337	ABEQ
338	ABGE
339	ABGT
340	ABLE
341	ABLT
342	ABLEU
343	ABLTU
344	ABNE
345	ABVC
346	ABVS
347	ASYSCALL
348
349	// compare and branch
350	ACMPBEQ
351	ACMPBGE
352	ACMPBGT
353	ACMPBLE
354	ACMPBLT
355	ACMPBNE
356	ACMPUBEQ
357	ACMPUBGE
358	ACMPUBGT
359	ACMPUBLE
360	ACMPUBLT
361	ACMPUBNE
362
363	// storage-and-storage
364	AMVC
365	ACLC
366	AXC
367	AOC
368	ANC
369
370	// load
371	AEXRL
372	ALARL
373	ALA
374	ALAY
375
376	// interlocked load and op
377	ALAA
378	ALAAG
379	ALAAL
380	ALAALG
381	ALAN
382	ALANG
383	ALAX
384	ALAXG
385	ALAO
386	ALAOG
387
388	// load/store multiple
389	ALMY
390	ALMG
391	ASTMY
392	ASTMG
393
394	// store clock
395	ASTCK
396	ASTCKC
397	ASTCKE
398	ASTCKF
399
400	// macros
401	ACLEAR
402
403	// vector
404	AVA
405	AVAB
406	AVAH
407	AVAF
408	AVAG
409	AVAQ
410	AVACC
411	AVACCB
412	AVACCH
413	AVACCF
414	AVACCG
415	AVACCQ
416	AVAC
417	AVACQ
418	AVACCC
419	AVACCCQ
420	AVN
421	AVNC
422	AVAVG
423	AVAVGB
424	AVAVGH
425	AVAVGF
426	AVAVGG
427	AVAVGL
428	AVAVGLB
429	AVAVGLH
430	AVAVGLF
431	AVAVGLG
432	AVCKSM
433	AVCEQ
434	AVCEQB
435	AVCEQH
436	AVCEQF
437	AVCEQG
438	AVCEQBS
439	AVCEQHS
440	AVCEQFS
441	AVCEQGS
442	AVCH
443	AVCHB
444	AVCHH
445	AVCHF
446	AVCHG
447	AVCHBS
448	AVCHHS
449	AVCHFS
450	AVCHGS
451	AVCHL
452	AVCHLB
453	AVCHLH
454	AVCHLF
455	AVCHLG
456	AVCHLBS
457	AVCHLHS
458	AVCHLFS
459	AVCHLGS
460	AVCLZ
461	AVCLZB
462	AVCLZH
463	AVCLZF
464	AVCLZG
465	AVCTZ
466	AVCTZB
467	AVCTZH
468	AVCTZF
469	AVCTZG
470	AVEC
471	AVECB
472	AVECH
473	AVECF
474	AVECG
475	AVECL
476	AVECLB
477	AVECLH
478	AVECLF
479	AVECLG
480	AVERIM
481	AVERIMB
482	AVERIMH
483	AVERIMF
484	AVERIMG
485	AVERLL
486	AVERLLB
487	AVERLLH
488	AVERLLF
489	AVERLLG
490	AVERLLV
491	AVERLLVB
492	AVERLLVH
493	AVERLLVF
494	AVERLLVG
495	AVESLV
496	AVESLVB
497	AVESLVH
498	AVESLVF
499	AVESLVG
500	AVESL
501	AVESLB
502	AVESLH
503	AVESLF
504	AVESLG
505	AVESRA
506	AVESRAB
507	AVESRAH
508	AVESRAF
509	AVESRAG
510	AVESRAV
511	AVESRAVB
512	AVESRAVH
513	AVESRAVF
514	AVESRAVG
515	AVESRL
516	AVESRLB
517	AVESRLH
518	AVESRLF
519	AVESRLG
520	AVESRLV
521	AVESRLVB
522	AVESRLVH
523	AVESRLVF
524	AVESRLVG
525	AVX
526	AVFAE
527	AVFAEB
528	AVFAEH
529	AVFAEF
530	AVFAEBS
531	AVFAEHS
532	AVFAEFS
533	AVFAEZB
534	AVFAEZH
535	AVFAEZF
536	AVFAEZBS
537	AVFAEZHS
538	AVFAEZFS
539	AVFEE
540	AVFEEB
541	AVFEEH
542	AVFEEF
543	AVFEEBS
544	AVFEEHS
545	AVFEEFS
546	AVFEEZB
547	AVFEEZH
548	AVFEEZF
549	AVFEEZBS
550	AVFEEZHS
551	AVFEEZFS
552	AVFENE
553	AVFENEB
554	AVFENEH
555	AVFENEF
556	AVFENEBS
557	AVFENEHS
558	AVFENEFS
559	AVFENEZB
560	AVFENEZH
561	AVFENEZF
562	AVFENEZBS
563	AVFENEZHS
564	AVFENEZFS
565	AVFA
566	AVFADB
567	AWFADB
568	AWFK
569	AWFKDB
570	AVFCE
571	AVFCEDB
572	AVFCEDBS
573	AWFCEDB
574	AWFCEDBS
575	AVFCH
576	AVFCHDB
577	AVFCHDBS
578	AWFCHDB
579	AWFCHDBS
580	AVFCHE
581	AVFCHEDB
582	AVFCHEDBS
583	AWFCHEDB
584	AWFCHEDBS
585	AWFC
586	AWFCDB
587	AVCDG
588	AVCDGB
589	AWCDGB
590	AVCDLG
591	AVCDLGB
592	AWCDLGB
593	AVCGD
594	AVCGDB
595	AWCGDB
596	AVCLGD
597	AVCLGDB
598	AWCLGDB
599	AVFD
600	AVFDDB
601	AWFDDB
602	AVLDE
603	AVLDEB
604	AWLDEB
605	AVLED
606	AVLEDB
607	AWLEDB
608	AVFM
609	AVFMDB
610	AWFMDB
611	AVFMA
612	AVFMADB
613	AWFMADB
614	AVFMS
615	AVFMSDB
616	AWFMSDB
617	AVFPSO
618	AVFPSODB
619	AWFPSODB
620	AVFLCDB
621	AWFLCDB
622	AVFLNDB
623	AWFLNDB
624	AVFLPDB
625	AWFLPDB
626	AVFSQ
627	AVFSQDB
628	AWFSQDB
629	AVFS
630	AVFSDB
631	AWFSDB
632	AVFTCI
633	AVFTCIDB
634	AWFTCIDB
635	AVGFM
636	AVGFMB
637	AVGFMH
638	AVGFMF
639	AVGFMG
640	AVGFMA
641	AVGFMAB
642	AVGFMAH
643	AVGFMAF
644	AVGFMAG
645	AVGEF
646	AVGEG
647	AVGBM
648	AVZERO
649	AVONE
650	AVGM
651	AVGMB
652	AVGMH
653	AVGMF
654	AVGMG
655	AVISTR
656	AVISTRB
657	AVISTRH
658	AVISTRF
659	AVISTRBS
660	AVISTRHS
661	AVISTRFS
662	AVL
663	AVLR
664	AVLREP
665	AVLREPB
666	AVLREPH
667	AVLREPF
668	AVLREPG
669	AVLC
670	AVLCB
671	AVLCH
672	AVLCF
673	AVLCG
674	AVLEH
675	AVLEF
676	AVLEG
677	AVLEB
678	AVLEIH
679	AVLEIF
680	AVLEIG
681	AVLEIB
682	AVFI
683	AVFIDB
684	AWFIDB
685	AVLGV
686	AVLGVB
687	AVLGVH
688	AVLGVF
689	AVLGVG
690	AVLLEZ
691	AVLLEZB
692	AVLLEZH
693	AVLLEZF
694	AVLLEZG
695	AVLM
696	AVLP
697	AVLPB
698	AVLPH
699	AVLPF
700	AVLPG
701	AVLBB
702	AVLVG
703	AVLVGB
704	AVLVGH
705	AVLVGF
706	AVLVGG
707	AVLVGP
708	AVLL
709	AVMX
710	AVMXB
711	AVMXH
712	AVMXF
713	AVMXG
714	AVMXL
715	AVMXLB
716	AVMXLH
717	AVMXLF
718	AVMXLG
719	AVMRH
720	AVMRHB
721	AVMRHH
722	AVMRHF
723	AVMRHG
724	AVMRL
725	AVMRLB
726	AVMRLH
727	AVMRLF
728	AVMRLG
729	AVMN
730	AVMNB
731	AVMNH
732	AVMNF
733	AVMNG
734	AVMNL
735	AVMNLB
736	AVMNLH
737	AVMNLF
738	AVMNLG
739	AVMAE
740	AVMAEB
741	AVMAEH
742	AVMAEF
743	AVMAH
744	AVMAHB
745	AVMAHH
746	AVMAHF
747	AVMALE
748	AVMALEB
749	AVMALEH
750	AVMALEF
751	AVMALH
752	AVMALHB
753	AVMALHH
754	AVMALHF
755	AVMALO
756	AVMALOB
757	AVMALOH
758	AVMALOF
759	AVMAL
760	AVMALB
761	AVMALHW
762	AVMALF
763	AVMAO
764	AVMAOB
765	AVMAOH
766	AVMAOF
767	AVME
768	AVMEB
769	AVMEH
770	AVMEF
771	AVMH
772	AVMHB
773	AVMHH
774	AVMHF
775	AVMLE
776	AVMLEB
777	AVMLEH
778	AVMLEF
779	AVMLH
780	AVMLHB
781	AVMLHH
782	AVMLHF
783	AVMLO
784	AVMLOB
785	AVMLOH
786	AVMLOF
787	AVML
788	AVMLB
789	AVMLHW
790	AVMLF
791	AVMO
792	AVMOB
793	AVMOH
794	AVMOF
795	AVNO
796	AVNOT
797	AVO
798	AVPK
799	AVPKH
800	AVPKF
801	AVPKG
802	AVPKLS
803	AVPKLSH
804	AVPKLSF
805	AVPKLSG
806	AVPKLSHS
807	AVPKLSFS
808	AVPKLSGS
809	AVPKS
810	AVPKSH
811	AVPKSF
812	AVPKSG
813	AVPKSHS
814	AVPKSFS
815	AVPKSGS
816	AVPERM
817	AVPDI
818	AVPOPCT
819	AVREP
820	AVREPB
821	AVREPH
822	AVREPF
823	AVREPG
824	AVREPI
825	AVREPIB
826	AVREPIH
827	AVREPIF
828	AVREPIG
829	AVSCEF
830	AVSCEG
831	AVSEL
832	AVSL
833	AVSLB
834	AVSLDB
835	AVSRA
836	AVSRAB
837	AVSRL
838	AVSRLB
839	AVSEG
840	AVSEGB
841	AVSEGH
842	AVSEGF
843	AVST
844	AVSTEH
845	AVSTEF
846	AVSTEG
847	AVSTEB
848	AVSTM
849	AVSTL
850	AVSTRC
851	AVSTRCB
852	AVSTRCH
853	AVSTRCF
854	AVSTRCBS
855	AVSTRCHS
856	AVSTRCFS
857	AVSTRCZB
858	AVSTRCZH
859	AVSTRCZF
860	AVSTRCZBS
861	AVSTRCZHS
862	AVSTRCZFS
863	AVS
864	AVSB
865	AVSH
866	AVSF
867	AVSG
868	AVSQ
869	AVSCBI
870	AVSCBIB
871	AVSCBIH
872	AVSCBIF
873	AVSCBIG
874	AVSCBIQ
875	AVSBCBI
876	AVSBCBIQ
877	AVSBI
878	AVSBIQ
879	AVSUMG
880	AVSUMGH
881	AVSUMGF
882	AVSUMQ
883	AVSUMQF
884	AVSUMQG
885	AVSUM
886	AVSUMB
887	AVSUMH
888	AVTM
889	AVUPH
890	AVUPHB
891	AVUPHH
892	AVUPHF
893	AVUPLH
894	AVUPLHB
895	AVUPLHH
896	AVUPLHF
897	AVUPLL
898	AVUPLLB
899	AVUPLLH
900	AVUPLLF
901	AVUPL
902	AVUPLB
903	AVUPLHW
904	AVUPLF
905
906	// binary
907	ABYTE
908	AWORD
909	ADWORD
910
911	// end marker
912	ALAST
913
914	// aliases
915	ABR = obj.AJMP
916	ABL = obj.ACALL
917)
918