1 // Inferno utils/6c/6.out.h
2 // http://code.google.com/p/inferno-os/source/browse/utils/6c/6.out.h
3 //
4 // Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
5 // Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
6 // Portions Copyright © 1997-1999 Vita Nuova Limited
7 // Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
8 // Portions Copyright © 2004,2006 Bruce Ellis
9 // Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
10 // Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
11 // Portions Copyright © 2009 The Go Authors. All rights reserved.
12 //
13 // Permission is hereby granted, free of charge, to any person obtaining a copy
14 // of this software and associated documentation files (the "Software"), to deal
15 // in the Software without restriction, including without limitation the rights
16 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17 // copies of the Software, and to permit persons to whom the Software is
18 // furnished to do so, subject to the following conditions:
19 //
20 // The above copyright notice and this permission notice shall be included in
21 // all copies or substantial portions of the Software.
22 //
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
29 // THE SOFTWARE.
30
31 #define NSYM 50
32 #define NSNAME 8
33 #define NOPROF (1<<0)
34 #define DUPOK (1<<1)
35 #define NOSPLIT (1<<2)
36 #define RODATA (1<<3)
37
38 /*
39 * amd64
40 */
41
42 enum as
43 {
44 AXXX,
45 AAAA,
46 AAAD,
47 AAAM,
48 AAAS,
49 AADCB,
50 AADCL,
51 AADCW,
52 AADDB,
53 AADDL,
54 AADDW,
55 AADJSP,
56 AANDB,
57 AANDL,
58 AANDW,
59 AARPL,
60 ABOUNDL,
61 ABOUNDW,
62 ABSFL,
63 ABSFW,
64 ABSRL,
65 ABSRW,
66 ABTL,
67 ABTW,
68 ABTCL,
69 ABTCW,
70 ABTRL,
71 ABTRW,
72 ABTSL,
73 ABTSW,
74 ABYTE,
75 ACALL,
76 ACLC,
77 ACLD,
78 ACLI,
79 ACLTS,
80 ACMC,
81 ACMPB,
82 ACMPL,
83 ACMPW,
84 ACMPSB,
85 ACMPSL,
86 ACMPSW,
87 ADAA,
88 ADAS,
89 ADATA,
90 ADECB,
91 ADECL,
92 ADECQ,
93 ADECW,
94 ADIVB,
95 ADIVL,
96 ADIVW,
97 AENTER,
98 AGLOBL,
99 AGOK,
100 AHISTORY,
101 AHLT,
102 AIDIVB,
103 AIDIVL,
104 AIDIVW,
105 AIMULB,
106 AIMULL,
107 AIMULW,
108 AINB,
109 AINL,
110 AINW,
111 AINCB,
112 AINCL,
113 AINCQ,
114 AINCW,
115 AINSB,
116 AINSL,
117 AINSW,
118 AINT,
119 AINTO,
120 AIRETL,
121 AIRETW,
122 AJCC,
123 AJCS,
124 AJCXZ,
125 AJEQ,
126 AJGE,
127 AJGT,
128 AJHI,
129 AJLE,
130 AJLS,
131 AJLT,
132 AJMI,
133 AJMP,
134 AJNE,
135 AJOC,
136 AJOS,
137 AJPC,
138 AJPL,
139 AJPS,
140 ALAHF,
141 ALARL,
142 ALARW,
143 ALEAL,
144 ALEAW,
145 ALEAVEL,
146 ALEAVEW,
147 ALOCK,
148 ALODSB,
149 ALODSL,
150 ALODSW,
151 ALONG,
152 ALOOP,
153 ALOOPEQ,
154 ALOOPNE,
155 ALSLL,
156 ALSLW,
157 AMOVB,
158 AMOVL,
159 AMOVW,
160 AMOVBLSX,
161 AMOVBLZX,
162 AMOVBQSX,
163 AMOVBQZX,
164 AMOVBWSX,
165 AMOVBWZX,
166 AMOVWLSX,
167 AMOVWLZX,
168 AMOVWQSX,
169 AMOVWQZX,
170 AMOVSB,
171 AMOVSL,
172 AMOVSW,
173 AMULB,
174 AMULL,
175 AMULW,
176 ANAME,
177 ANEGB,
178 ANEGL,
179 ANEGW,
180 ANOP,
181 ANOTB,
182 ANOTL,
183 ANOTW,
184 AORB,
185 AORL,
186 AORW,
187 AOUTB,
188 AOUTL,
189 AOUTW,
190 AOUTSB,
191 AOUTSL,
192 AOUTSW,
193 APAUSE,
194 APOPAL,
195 APOPAW,
196 APOPFL,
197 APOPFW,
198 APOPL,
199 APOPW,
200 APUSHAL,
201 APUSHAW,
202 APUSHFL,
203 APUSHFW,
204 APUSHL,
205 APUSHW,
206 ARCLB,
207 ARCLL,
208 ARCLW,
209 ARCRB,
210 ARCRL,
211 ARCRW,
212 AREP,
213 AREPN,
214 ARET,
215 AROLB,
216 AROLL,
217 AROLW,
218 ARORB,
219 ARORL,
220 ARORW,
221 ASAHF,
222 ASALB,
223 ASALL,
224 ASALW,
225 ASARB,
226 ASARL,
227 ASARW,
228 ASBBB,
229 ASBBL,
230 ASBBW,
231 ASCASB,
232 ASCASL,
233 ASCASW,
234 ASETCC,
235 ASETCS,
236 ASETEQ,
237 ASETGE,
238 ASETGT,
239 ASETHI,
240 ASETLE,
241 ASETLS,
242 ASETLT,
243 ASETMI,
244 ASETNE,
245 ASETOC,
246 ASETOS,
247 ASETPC,
248 ASETPL,
249 ASETPS,
250 ACDQ,
251 ACWD,
252 ASHLB,
253 ASHLL,
254 ASHLW,
255 ASHRB,
256 ASHRL,
257 ASHRW,
258 ASTC,
259 ASTD,
260 ASTI,
261 ASTOSB,
262 ASTOSL,
263 ASTOSW,
264 ASUBB,
265 ASUBL,
266 ASUBW,
267 ASYSCALL,
268 ATESTB,
269 ATESTL,
270 ATESTW,
271 ATEXT,
272 AVERR,
273 AVERW,
274 AWAIT,
275 AWORD,
276 AXCHGB,
277 AXCHGL,
278 AXCHGW,
279 AXLAT,
280 AXORB,
281 AXORL,
282 AXORW,
283
284 AFMOVB,
285 AFMOVBP,
286 AFMOVD,
287 AFMOVDP,
288 AFMOVF,
289 AFMOVFP,
290 AFMOVL,
291 AFMOVLP,
292 AFMOVV,
293 AFMOVVP,
294 AFMOVW,
295 AFMOVWP,
296 AFMOVX,
297 AFMOVXP,
298
299 AFCOMB,
300 AFCOMBP,
301 AFCOMD,
302 AFCOMDP,
303 AFCOMDPP,
304 AFCOMF,
305 AFCOMFP,
306 AFCOML,
307 AFCOMLP,
308 AFCOMW,
309 AFCOMWP,
310 AFUCOM,
311 AFUCOMP,
312 AFUCOMPP,
313
314 AFADDDP,
315 AFADDW,
316 AFADDL,
317 AFADDF,
318 AFADDD,
319
320 AFMULDP,
321 AFMULW,
322 AFMULL,
323 AFMULF,
324 AFMULD,
325
326 AFSUBDP,
327 AFSUBW,
328 AFSUBL,
329 AFSUBF,
330 AFSUBD,
331
332 AFSUBRDP,
333 AFSUBRW,
334 AFSUBRL,
335 AFSUBRF,
336 AFSUBRD,
337
338 AFDIVDP,
339 AFDIVW,
340 AFDIVL,
341 AFDIVF,
342 AFDIVD,
343
344 AFDIVRDP,
345 AFDIVRW,
346 AFDIVRL,
347 AFDIVRF,
348 AFDIVRD,
349
350 AFXCHD,
351 AFFREE,
352
353 AFLDCW,
354 AFLDENV,
355 AFRSTOR,
356 AFSAVE,
357 AFSTCW,
358 AFSTENV,
359 AFSTSW,
360
361 AF2XM1,
362 AFABS,
363 AFCHS,
364 AFCLEX,
365 AFCOS,
366 AFDECSTP,
367 AFINCSTP,
368 AFINIT,
369 AFLD1,
370 AFLDL2E,
371 AFLDL2T,
372 AFLDLG2,
373 AFLDLN2,
374 AFLDPI,
375 AFLDZ,
376 AFNOP,
377 AFPATAN,
378 AFPREM,
379 AFPREM1,
380 AFPTAN,
381 AFRNDINT,
382 AFSCALE,
383 AFSIN,
384 AFSINCOS,
385 AFSQRT,
386 AFTST,
387 AFXAM,
388 AFXTRACT,
389 AFYL2X,
390 AFYL2XP1,
391
392 AEND,
393
394 ADYNT_,
395 AINIT_,
396
397 ASIGNAME,
398
399 /* extra 32-bit operations */
400 ACMPXCHGB,
401 ACMPXCHGL,
402 ACMPXCHGW,
403 ACMPXCHG8B,
404 ACPUID,
405 AINVD,
406 AINVLPG,
407 ALFENCE,
408 AMFENCE,
409 AMOVNTIL,
410 ARDMSR,
411 ARDPMC,
412 ARDTSC,
413 ARSM,
414 ASFENCE,
415 ASYSRET,
416 AWBINVD,
417 AWRMSR,
418 AXADDB,
419 AXADDL,
420 AXADDW,
421
422 /* conditional move */
423 ACMOVLCC,
424 ACMOVLCS,
425 ACMOVLEQ,
426 ACMOVLGE,
427 ACMOVLGT,
428 ACMOVLHI,
429 ACMOVLLE,
430 ACMOVLLS,
431 ACMOVLLT,
432 ACMOVLMI,
433 ACMOVLNE,
434 ACMOVLOC,
435 ACMOVLOS,
436 ACMOVLPC,
437 ACMOVLPL,
438 ACMOVLPS,
439 ACMOVQCC,
440 ACMOVQCS,
441 ACMOVQEQ,
442 ACMOVQGE,
443 ACMOVQGT,
444 ACMOVQHI,
445 ACMOVQLE,
446 ACMOVQLS,
447 ACMOVQLT,
448 ACMOVQMI,
449 ACMOVQNE,
450 ACMOVQOC,
451 ACMOVQOS,
452 ACMOVQPC,
453 ACMOVQPL,
454 ACMOVQPS,
455 ACMOVWCC,
456 ACMOVWCS,
457 ACMOVWEQ,
458 ACMOVWGE,
459 ACMOVWGT,
460 ACMOVWHI,
461 ACMOVWLE,
462 ACMOVWLS,
463 ACMOVWLT,
464 ACMOVWMI,
465 ACMOVWNE,
466 ACMOVWOC,
467 ACMOVWOS,
468 ACMOVWPC,
469 ACMOVWPL,
470 ACMOVWPS,
471
472 /* 64-bit */
473 AADCQ,
474 AADDQ,
475 AANDQ,
476 ABSFQ,
477 ABSRQ,
478 ABTCQ,
479 ABTQ,
480 ABTRQ,
481 ABTSQ,
482 ACMPQ,
483 ACMPSQ,
484 ACMPXCHGQ,
485 ACQO,
486 ADIVQ,
487 AIDIVQ,
488 AIMULQ,
489 AIRETQ,
490 ALEAQ,
491 ALEAVEQ,
492 ALODSQ,
493 AMOVQ,
494 AMOVLQSX,
495 AMOVLQZX,
496 AMOVNTIQ,
497 AMOVSQ,
498 AMULQ,
499 ANEGQ,
500 ANOTQ,
501 AORQ,
502 APOPFQ,
503 APOPQ,
504 APUSHFQ,
505 APUSHQ,
506 ARCLQ,
507 ARCRQ,
508 AROLQ,
509 ARORQ,
510 AQUAD,
511 ASALQ,
512 ASARQ,
513 ASBBQ,
514 ASCASQ,
515 ASHLQ,
516 ASHRQ,
517 ASTOSQ,
518 ASUBQ,
519 ATESTQ,
520 AXADDQ,
521 AXCHGQ,
522 AXORQ,
523
524 /* media */
525 AADDPD,
526 AADDPS,
527 AADDSD,
528 AADDSS,
529 AANDNPD,
530 AANDNPS,
531 AANDPD,
532 AANDPS,
533 ACMPPD,
534 ACMPPS,
535 ACMPSD,
536 ACMPSS,
537 ACOMISD,
538 ACOMISS,
539 ACVTPD2PL,
540 ACVTPD2PS,
541 ACVTPL2PD,
542 ACVTPL2PS,
543 ACVTPS2PD,
544 ACVTPS2PL,
545 ACVTSD2SL,
546 ACVTSD2SQ,
547 ACVTSD2SS,
548 ACVTSL2SD,
549 ACVTSL2SS,
550 ACVTSQ2SD,
551 ACVTSQ2SS,
552 ACVTSS2SD,
553 ACVTSS2SL,
554 ACVTSS2SQ,
555 ACVTTPD2PL,
556 ACVTTPS2PL,
557 ACVTTSD2SL,
558 ACVTTSD2SQ,
559 ACVTTSS2SL,
560 ACVTTSS2SQ,
561 ADIVPD,
562 ADIVPS,
563 ADIVSD,
564 ADIVSS,
565 AEMMS,
566 AFXRSTOR,
567 AFXRSTOR64,
568 AFXSAVE,
569 AFXSAVE64,
570 ALDMXCSR,
571 AMASKMOVOU,
572 AMASKMOVQ,
573 AMAXPD,
574 AMAXPS,
575 AMAXSD,
576 AMAXSS,
577 AMINPD,
578 AMINPS,
579 AMINSD,
580 AMINSS,
581 AMOVAPD,
582 AMOVAPS,
583 AMOVOU,
584 AMOVHLPS,
585 AMOVHPD,
586 AMOVHPS,
587 AMOVLHPS,
588 AMOVLPD,
589 AMOVLPS,
590 AMOVMSKPD,
591 AMOVMSKPS,
592 AMOVNTO,
593 AMOVNTPD,
594 AMOVNTPS,
595 AMOVNTQ,
596 AMOVO,
597 AMOVQOZX,
598 AMOVSD,
599 AMOVSS,
600 AMOVUPD,
601 AMOVUPS,
602 AMULPD,
603 AMULPS,
604 AMULSD,
605 AMULSS,
606 AORPD,
607 AORPS,
608 APACKSSLW,
609 APACKSSWB,
610 APACKUSWB,
611 APADDB,
612 APADDL,
613 APADDQ,
614 APADDSB,
615 APADDSW,
616 APADDUSB,
617 APADDUSW,
618 APADDW,
619 APANDB,
620 APANDL,
621 APANDSB,
622 APANDSW,
623 APANDUSB,
624 APANDUSW,
625 APANDW,
626 APAND,
627 APANDN,
628 APAVGB,
629 APAVGW,
630 APCMPEQB,
631 APCMPEQL,
632 APCMPEQW,
633 APCMPGTB,
634 APCMPGTL,
635 APCMPGTW,
636 APEXTRW,
637 APFACC,
638 APFADD,
639 APFCMPEQ,
640 APFCMPGE,
641 APFCMPGT,
642 APFMAX,
643 APFMIN,
644 APFMUL,
645 APFNACC,
646 APFPNACC,
647 APFRCP,
648 APFRCPIT1,
649 APFRCPI2T,
650 APFRSQIT1,
651 APFRSQRT,
652 APFSUB,
653 APFSUBR,
654 APINSRW,
655 APMADDWL,
656 APMAXSW,
657 APMAXUB,
658 APMINSW,
659 APMINUB,
660 APMOVMSKB,
661 APMULHRW,
662 APMULHUW,
663 APMULHW,
664 APMULLW,
665 APMULULQ,
666 APOR,
667 APSADBW,
668 APSHUFHW,
669 APSHUFL,
670 APSHUFLW,
671 APSHUFW,
672 APSLLO,
673 APSLLL,
674 APSLLQ,
675 APSLLW,
676 APSRAL,
677 APSRAW,
678 APSRLO,
679 APSRLL,
680 APSRLQ,
681 APSRLW,
682 APSUBB,
683 APSUBL,
684 APSUBQ,
685 APSUBSB,
686 APSUBSW,
687 APSUBUSB,
688 APSUBUSW,
689 APSUBW,
690 APSWAPL,
691 APUNPCKHBW,
692 APUNPCKHLQ,
693 APUNPCKHQDQ,
694 APUNPCKHWL,
695 APUNPCKLBW,
696 APUNPCKLLQ,
697 APUNPCKLQDQ,
698 APUNPCKLWL,
699 APXOR,
700 ARCPPS,
701 ARCPSS,
702 ARSQRTPS,
703 ARSQRTSS,
704 ASHUFPD,
705 ASHUFPS,
706 ASQRTPD,
707 ASQRTPS,
708 ASQRTSD,
709 ASQRTSS,
710 ASTMXCSR,
711 ASUBPD,
712 ASUBPS,
713 ASUBSD,
714 ASUBSS,
715 AUCOMISD,
716 AUCOMISS,
717 AUNPCKHPD,
718 AUNPCKHPS,
719 AUNPCKLPD,
720 AUNPCKLPS,
721 AXORPD,
722 AXORPS,
723
724 APF2IW,
725 APF2IL,
726 API2FW,
727 API2FL,
728 ARETFW,
729 ARETFL,
730 ARETFQ,
731 ASWAPGS,
732
733 AMODE,
734 ACRC32B,
735 ACRC32Q,
736
737 ALAST
738 };
739
740 enum
741 {
742
743 D_AL = 0,
744 D_CL,
745 D_DL,
746 D_BL,
747 D_SPB,
748 D_BPB,
749 D_SIB,
750 D_DIB,
751 D_R8B,
752 D_R9B,
753 D_R10B,
754 D_R11B,
755 D_R12B,
756 D_R13B,
757 D_R14B,
758 D_R15B,
759
760 D_AX = 16,
761 D_CX,
762 D_DX,
763 D_BX,
764 D_SP,
765 D_BP,
766 D_SI,
767 D_DI,
768 D_R8,
769 D_R9,
770 D_R10,
771 D_R11,
772 D_R12,
773 D_R13,
774 D_R14,
775 D_R15,
776
777 D_AH = 32,
778 D_CH,
779 D_DH,
780 D_BH,
781
782 D_F0 = 36,
783
784 D_M0 = 44,
785
786 D_X0 = 52,
787 D_X1,
788 D_X2,
789 D_X3,
790 D_X4,
791 D_X5,
792 D_X6,
793 D_X7,
794
795 D_CS = 68,
796 D_SS,
797 D_DS,
798 D_ES,
799 D_FS,
800 D_GS,
801
802 D_GDTR, /* global descriptor table register */
803 D_IDTR, /* interrupt descriptor table register */
804 D_LDTR, /* local descriptor table register */
805 D_MSW, /* machine status word */
806 D_TASK, /* task register */
807
808 D_CR = 79,
809 D_DR = 95,
810 D_TR = 103,
811
812 D_NONE = 111,
813
814 D_BRANCH = 112,
815 D_EXTERN = 113,
816 D_STATIC = 114,
817 D_AUTO = 115,
818 D_PARAM = 116,
819 D_CONST = 117,
820 D_FCONST = 118,
821 D_SCONST = 119,
822 D_ADDR = 120,
823
824 D_FILE,
825 D_FILE1,
826
827 D_INDIR, /* additive */
828
829 D_SIZE = D_INDIR + D_INDIR, /* 6l internal */
830 D_PCREL,
831
832 T_TYPE = 1<<0,
833 T_INDEX = 1<<1,
834 T_OFFSET = 1<<2,
835 T_FCONST = 1<<3,
836 T_SYM = 1<<4,
837 T_SCONST = 1<<5,
838 T_64 = 1<<6,
839 T_GOTYPE = 1<<7,
840
841 REGARG = -1,
842 REGRET = D_AX,
843 FREGRET = D_X0,
844 REGSP = D_SP,
845 REGTMP = D_DI,
846 REGEXT = D_R15, /* compiler allocates external registers R15 down */
847 FREGMIN = D_X0+5, /* first register variable */
848 FREGEXT = D_X0+15 /* first external register */
849 };
850
851 /*
852 * this is the ranlib header
853 */
854 #define SYMDEF "__.SYMDEF"
855
856 /*
857 * this is the simulated IEEE floating point
858 */
859 typedef struct ieee Ieee;
860 struct ieee
861 {
862 int32 l; /* contains ls-man 0xffffffff */
863 int32 h; /* contains sign 0x80000000
864 exp 0x7ff00000
865 ms-man 0x000fffff */
866 };