1 /*  MACLISP Compiled SUBR Block */
 2 
 3 dcl 1 subr_block_head based aligned,              /* this is the first part of the subr block */
 4       2 next_compiled_block ptr,                  /* for xctblt */
 5       2 instructions(4) bit(36),                  /* the common entry code */
 6       2 subr_code_link_offset bin(17) unal,       /* points to subr code link */
 7       2 rest_of_tsplp bit(18) unal,               /* tsplp ,ic* */
 8       2 gcmark bit(18) unal,                      /* for garbage collector to remember seeing this block */
 9       2 gc_length fixed bin(17) unal,             /* number garbage collectable objects */
10       2 constants(1000) fixed bin(71);  /* the compiled constants */
11 
12 /* alternate declaration of above */
13 
14 dcl 1 subr_block_head_overlay based aligned,
15       2 first_word bit(36),
16       2 second_word aligned,
17         3 padding bit(28) unaligned,
18         3 no_links_are_snapped bit(1) unaligned,  /* "1"b if no itp links in this block have been snapped */
19         3 more_padding bit(7) unaligned;
20 
21 
22 
23 dcl 1 lisp_subr_links(1000) based aligned,        /* the subr links follow the constants, and are the last gc'ed items */
24       2 itp_base bit(3) unal,
25       2 itp_info bit(27) unal,                    /* produced by compiler */
26       2 itp_mod bit(6) unal,
27       2 link_opr_tv_offset bit(18) unal,
28       2 mbz bit(12) unal,
29       2 further_mod bit(6) unal;                  /* when itp; this is indirect */
30 
31 
32 dcl 1 subr_entries(1000) based aligned,           /* these are next in block, not gc'able */
33       2 nargs bit(18) unal,
34       2 code_offset bit(18) unal,                 /* offset of entrypoint in object segment */
35       2 head_offset bin(17) unal,                 /* offset to common entry sequence in subr_block_head */
36       2 rest_of_tsx0 bit(18) unal;                /* tsx0   ,ic */
37 
38 
39 dcl 1 link_to_subr_code based aligned,            /* used by lisp_linker_ to find object segment */
40       2 itp_to_linker ptr,                        /* points to linker, reset by linker to point to base of object seg */
41       2 compilation_time fixed bin(71),           /* used to verify linking to correct segment */
42       2 name_length fixed bin(24),                /* length of subroutines name...both segname and ename */
43       2 name char(0 refer(link_to_subr_code.name_length)) unal;
44 
45 dcl instructions_for_subr (4) bit(36) static init("000000000000000100110010111000001111"b,
46                                                      "001111111111111100110101000001001111"b,
47                                                      "001111111111111110010101010001001111"b,
48                                                      "111111111111111110111010000000001000"b),
49     tsplp_ic_ind bit(18) static init("110111000000010100"b),
50     tsx0_ic bit(18) static init("111000000000000100"b);
51 
52 dcl 1 array_links (1000) aligned based, /* come after entries, before link_to_subr_code */
53       2 instruction bit(36) aligned,              /* tspbp to array_link_snap operator
54                                                      or eppbb *+2,* when snapped */
55       2 control_word unaligned,                   /* controls what to snap to */
56         3 type fixed bin(8),                      /* 0=S-expr, 2=fixnum, 3=flonum */
57         3 ndims fixed bin(8),
58         3 atomic_symbol fixed bin(17),  /* offset in constants to symbol which names array */
59       2 pointer pointer;                          /* -> array_info block when snapped */
60 
61 dcl 1 array_link_count aligned based,             /* comes after array_links, before link_to_subr_code */
62       2 unused bit(36),
63       2 number_of_array_links fixed bin(17) unaligned,
64       2 must_be_zero bit(18) unaligned;           /* 0 to distinguish from tsx0 in subr block with no array links */
65 
66 /* End of description of Compiled SUBR Block */