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